選擇排序原理分析與java程式碼實現
1、選擇排序改進了氣泡排序,將必要的交換次數從 O(N^2 )減少到 O(N)次(理解選擇排序可以先看一下我的上一篇氣泡排序的部落格)不幸的是比較次數仍然保持為 O(N^2 )。然而,選擇排序仍然為大記錄量的排序提出了一個非常重要的改進,因為這些大量的記錄需要在記憶體中移動,這就使交換的時間和比較的時間相比起來,交換的時間更為重要。(一般來說,在 Java 語言中不是這種情況,Java 中只是改變了引用位置,而實際物件的位置並沒有發生改變。)
選擇排序原理即:在選擇排序中,不再只比較兩個相鄰的資料。因此需要記錄下某一個數據的下標,進行選擇排序就是把所有的資料掃描一遍,從中挑出(按從小到大排序)最小的一個數據,這個最小的資料和最左端下標為
2、程式碼實現
public class ArraySort {
public static void main(String[] args) {
int[] array = {1, 7, 3, 9, 8, 5, 4, 6};
array = sort(array);
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
public static int[] sort(int[] array) {
for (int i = 0; i < array.length-1; i++) {
int temp = i;
for (int j = i+1; j < array.length; j++) {
if (array[temp] > array[j]) {
temp = j;
}
}
int t = array[temp];
array[temp] = array[i];
array[i] = t;
}
return array;
}
}
3、效率
選擇排序和氣泡排序執行了相同次數的比較:N*(N-1)/2。對於 10 個數據項,需要 45 次比較。然而,10 個數據項只需要少於 10次交換。對於 100 個數據項,需要 4950 次比較,但只進行了不到 100 次的交換。N 值很大時,比較次數是主要的,所以結論是選擇排序和氣泡排序一樣運行了 O(N^2)時間。但是,選擇排序無疑更快,因為它進行的交換少得多。當 N 值較小時,特別是如果交換的時間級比比較的時間級大得多時,選擇排序實際上是相當快的。