簡單選擇排序實現
簡單選擇排序就是通過n-i次關鍵字之間的比較,從n-i+1個記錄中選出關鍵字最小的記錄,並和第i (1 ≤ i ≤ n)個記錄交換。
代碼實現:
public class SelectSort {
//置換
public void swap(int[] elem, int i, int j) {
int temp = elem[i];
elem[i] = elem[j];
elem[j] = temp;
}
//簡單選擇排序
public void selectSort(int[] elem) {
int min;
for (int i = 1; i < elem.length; i++) {
min = i;
for (int j = i+1; j < elem.length; j++) {
if(elem[min] > elem[j]) {
min = j;
}
}
if(min != i) {
swap(elem, i, min);
}
}
}
public static void main(String[] args) {
SelectSort s = new SelectSort();
int[] elem = {0, 9, 1, 5, 8, 3, 7, 4, 6, 2};
s.selectSort(elem);
for (int i = 0; i < elem.length; i++) {
System.out.print(elem[i] + ", ");
}
}
}
當i=時,elem[i]=9,min開始是1,然后與j=2到9比較elem[min]與elem[j]的大小。因為j=2最小,所以min=2,注意這里比較了8次,卻只交換數據操作一次
簡單選擇排序復雜度分析
簡單選擇排序的特點是交換移動數據次數相對較少,這樣節約了相應的時間,分析復雜度發現無論好壞情況,其比較次數是一樣多的,第i趟排序需要進行n-i次關鍵字比較,此時需要比較
次。而對於交換次數來說,當最好的時候交換為0次,最差的時候交換為n-1次。所以總的時間復雜度依然為O(
)
盡管與冒泡排序同為O(
),但簡單選擇排序的性能要略優於冒泡排序。