选择排序(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