標籤:style blog http io 使用 ar strong for 資料
選擇排序
上品物語
知識點:
1.1 原理
首先,找到數組中最小的那個元素,其次,將它和數組的第一個元素交換位置(如果第一個元素就是最小元素,那麼它就和自己交換)。再次,在剩下的元素中找到最小的元素,將它與數組的第二個元素交換位置。如此往複,直到將整個數組排序。這種方法叫做選擇排序,因為它在不斷地選擇剩餘元素之中的最小者。
1.2
1.3 演算法
|
public class Selection {
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;
}
public static void sort(Comparable[] a){
//將a[]按升序排序
int N = a.length;
for(int i = 0; i < N; i++){
int min = i;
for(int j = i+1; j < N; j++)
if(less(a[j],a[min]))
min = j;
exch(a,i,min);
}
}
} |
1.4 特點
已耗用時間和輸入無關。為了找出最小的元素而掃描一遍數組並不能為下一遍掃描提供什麼資訊。這種性質在某些情況下是缺點,因為使用選擇排序的人可能會驚訝地發現,一個已經有序的數組或是主鍵全部相等的數組和一個元素隨機排列的數組所用的排序時間竟然一樣長!我們將會看到,其他演算法會更善於利用輸入的初始狀態。
資料移動是最少的。每次交換都會改變兩個數組元素的值,因此選擇排序用了N次交換——交換次數和數組的大小是線性關係。我們將研究的其他任何演算法都不具備這個特徵(大部分的增長數量級都是線性對數或是平方層級)。
排序——選擇排序