public class Selection {
/**
*首先找到数组中最小的那个元素,其次将它和数组中的第一个元素交换位置
* 再次,在剩下的元素中找到最小的元素,将它和数组中的第二个元素交换位置
* 。如此往复。直到整个数组有序
*/
public static void sort(Comparable[] a) {
int N = a.length; for (int i = 0; i < N; i++) {
int min = i; for (int j = i + 1; j < a.length; j++) {
if (less(a[j], a[min])) {
min = j; }
}
exch(a, i, min); }
}
private static void exch(Comparable[] a, int i, int min) {
Comparable t = a[i]; a[i] = a[min]; a[min] = t; }
private static boolean less(Comparable v, Comparable w) {
return v.compareTo(w) < 0; }
private static void show(Comparable[] a) {
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " "); }
}
public static void main(String[] args) {
String[] a=new String []{"t","g","c","p","f","w","v"};
sort(a);
show(a);
}
输出结果”c f g p t v w”
对于长度为N的数组,选择排序大约1/2 N^2次比较和N次交换