选择排序

选择排序(Selection Sort)是一种简单直观的排序算法。工作原理如下:首先在未排序序列中找到最大(小)的元素,存放到序列的起始位置,然后再从剩余未排序序列中继续查找最大(小)的元素,然后存放到已排序序列的末尾。以此类摧,直到所有元素排序完毕。

选择排序的主要优点与移动数据有关,如果某个元素位于正确的位置上,则它不会被移动。


主要步骤:

1.从序列开始到结尾查找最小的元素并存放到第一个位置。

2.从剩余序列查找最小元素,存放到已排序序列末尾。

3.重复第二步操作,直到全部元素有序。


选择排序示意图:

代码实现:

C语言代码:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 #define N 10
 5 
 6 int main()
 7 {
 8     int i, j, k, temp;
 9     int arr[N] = {36, 58, 12, 59, 65, 96, 39, 68, 24, 86};
10     for(i=0; i<N-1; i++) {
11         k = i;
12         for(j=i+1; j<N; j++) {
13             if(arr[j] < arr[k]) {
14                 k = j;
15             }
16         }
17         if(k != i) {
18             temp = arr[i];
19             arr[i] = arr[k];
20             arr[k] = temp;
21         }
22     }
23     for(i=0; i<N; i++) {
24         printf("%-3d", arr[i]);
25     }
26     printf("
");
27     return 0;
28 }

Java代码:

 1 import java.util.Arrays;
 2 
 3 public class SelectionSort {
 4     
 5     public static void main(String[] args) {
 6         
 7         int arr[] = {36, 58, 12, 59, 65, 96, 39, 68, 24, 86};
 8         
 9         for(int i=0; i<arr.length-1; i++) {
10             int k = i;
11             for(int j=i+1; j<arr.length; j++) {
12                 if(arr[j] < arr[k]) {
13                     k = j;
14                 }
15             }
16             if(k != i) {
17                 int temp = arr[i];
18                 arr[i]= arr[k];
19                 arr[k] = temp;
20             }
21         }    
22         System.out.println(Arrays.toString(arr));;
23     }
24 }

参考资料:维基百科

转载请注明出处:http://www.cnblogs.com/michaelwong/p/4114937.html


原文地址:https://www.cnblogs.com/michaelwong/p/4114937.html