1、遍历整个数组找到最小的那个元素。
2、将他和数组的第一个元素交换位置(如果第一个元素是最小元素,则和自己交换)。
3、在剩下的元素中找到最小的元素,将他和数组的第二个元素交换位置。
4、如此往复,直到将整个数组排序。
1、java部分实现(通过Comparable接口):
1 public class Selection 2 { 3 private static boolean less(Comparable v, Comparable w) 4 { 5 //检测v是否小于w,为真返回负,为假返回正,相等返回零 6 return v.compareTo(w) < 0; 7 } 8 9 private static void exch(Comparable[] a, int i, int j) 10 { 11 //交换元素位置 12 Comparable t = a[i]; 13 a[i] = a[j]; 14 a[j] = t; 15 } 16 17 public static void sort(Comparable[] a) 18 { 19 20 int N = a.length; 21 for (int i = 0; i < N; i++) 22 { 23 int min = i; //把i设为初始最小元素 24 for (j = i + 1; j < N; j++) 25 if (less(a[j], min)) 26 min = j; //把i之后的每一个元素都与当前的最小元素比较,若比最小元素小,则把索引赋值给最小元素 27 exch(a, i, min); //比较完成后,把最小元素与i的位置交换 28 } 29 } 30 }
2、python实现
1 def Selection(list): 2 for i in range(len(list)): 3 min = i 4 for j in range(i, len(list)): 5 if list[min] > list[j]: 6 min = j 7 temp = list[i] 8 list[i] = list[min] 9 list[min] = temp
1、运行时间和输入无关
2、数据移动是最少的
3、需要大约N2/2次比较和N次交换
原文:http://www.cnblogs.com/SlientGuest/p/4892367.html