选择排序:
首先找到数组中最小的那个元素,其次将它和数组的第一个元素交换位置(如果第一个元素就是最小元素,那么它和它自己交换。 * 在剩下的元素中找最小的元素,将其与数组中的第二个元素交换,如此往复,直到将整个数组排序。 * 不断的选择剩余元素中的最小者
public static void main(String[] args){
Integer[] a = { 23, 21, 4, 6, 7, 5, 11, 1};
selectSort(a);
System.out.println(isSorted(a));
show(a);
}
public static void selectSort(Comparable[] array){
//遍历整个数组
for(int i = 0; i < array.length; i++){
//将a[i] 和a[i + 1...N]中的最小元素交换
int min = i;//最小元素索引
for(int j = i + 1; j < array.length; j++){
if(less(array[j], array[min])){//如果array[j] 比 array[min]小
min = j;
}
}
exch(array, i, min);//交换两个元素
}
}
/*
对元素进行比较,v < w 返回真。
*/
public static boolean less(Comparable v, Comparable w){
return v.compareTo(w) < 0;//v小于w返回true
}
/*
交换两个元素
*/
public static void exch(Comparable[] a, int i, int j){
Comparable t = a[i];
a[i] = a[j];
a[j] = t;
}
public static void show(Comparable[] a){
for(int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
}
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;
}
时间复杂度:O(N^2)
不稳定排序