选择排序
- 找到数组中最小的那个元素,其次,将它和数组中的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。
- 再次,在剩下的元素中找到最小的元素,将它与数组中的第二个元素交换。
- 如此往复,直到将整个数组排序。
package sort;
public class Selection {
public static void sort(Comparable[] a) {
// 按照升序排列
int N = a.length; // 数组长度
for (int i = 0; i < N; i++) {
// 将a[i]和它后面最小的元素进行交换
int min = i;
for (int j = i + 1; j < N; j++)
if (less(a[j], a[min]))
min = j;
exch(a, i, min);
}
}
private static boolean less(Comparable v, Comparable w) {
return v.compareTo(w) < 0;
}
private static void exch(Comparable[] a, int i, int j) {
Comparable t = a[i];
a[i] = a[j];
a[j] = t;
}
private static void show(Comparable[] a) {
// 在单行中打印数据
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
System.out.println();
}
public static boolean isSorted(Comparable[] a) {
// 测试数组是否有序排列
for (int i = 1; i < a.length; i++) {
if (less(a[i], a[i - 1]))
return false;
}
return true;
}
public static void main(String[] args) {
// 从标准输入读取字符串,将他们排序并输出
String[] a = In.readStrings();
sort(a);
show(a);
}
}
结论:对于长度为N的数组,选择排序需要大约N2/2次比较和N次交换。