默認算法排序以從小到大的順序排序
選擇排序(算法 第四版):
首先,找到數組中最小的那個元素,其次,將它和數組的第一個元素交換位置(如果第一個元素就是最小元素那麼它就和自己交換)。再次,在剩下的元素中找到最小的元素,將它與數組的第二個元素交換位置。如此往復,直到將整個數組排序。
public class SelectSort {
public static void sort(int[] a) {
for (int i = 0; i < a.length - 1; i++) {
// 最小元素的索引,等到比較出最小元素再置換位置
int min = i;
for (int j = i + 1; j < a.length; j++) {
//判斷角標j的元素和最小元素的大小,
//a[j]小於a[min]則將j的值賦給min,直到循環完成
if (less(a[j], a[min])) {
min = j;
}
}
//min和i的值相同時則不進行位置交換操作
if (min == i) {
continue;
}
exch(a, i, min);
}
}
//位置交換
private static void exch(int[] a, int i, int j) {
int t = a[i];
a[i] = a[j];
a[j] = t;
}
//判斷v和w的大小,v小於w返回true,否則false
private static boolean less(Integer v, Integer w) {
return v.compareTo(w) < 0;
}
}
小結:對於排序而言就是比較大小,和置換位置,在java中,數組中元素頻繁的置換位置小數據量的時候對於性能沒有影響,但是數據量比較大的時候會影響排序的效率,因爲交換位置是在堆中發生的,所以使用第三方變量來記錄住最小元素的位置,比較完成後將最小元素放到前面的位置即可。
一個已經有序的數組或是主鍵全部相等的數組和一個元素隨機排列的數組所用的排序時間是一樣長的。