原理
首先找到数组中最小的元素,让它和数组中第一个元素进行交换。然后在剩下的数组中找到最小的元素让它与第二个元素进行交换。如此往复,直到将整个数组排序。
具体代码
1 public static void sort(Comparable[] a) 2 { 3 int i,j; 4 for(i=0;i<a.length;i++) 5 { 6 int min = i; 7 for(j=i;j<a.length;j++) 8 { 9 if(less(a[j],a[min])) min=j; 10 } 11 exch(a,i,j); 12 } 13 } 14 private static void exch(Comparable[] a,int i,int j) 15 { 16 Comparable t = a[i]; a[i]=a[j]; a[j] = t; 17 } 18 public static boolean less(Comparable v,Comparable w) 19 { 20 return v.compareTo(w)<0; 21 }
对于长度为N的数组,选择排序需要大约N2/2次比较和N次交换。
0到N-1的任意i都会进行一次交换和N-1-i次比较,因此总共有N次交换和(N-1)+(N-2)+(N-3)+..+(1) = N(N-1)/2 ~ N2/2次比较。