我是野豬。
排序: 將雜亂無章的數據元素,通過一定的方法按關鍵字順序排列的過程叫做排序。對數據進行排序有可能是檢索的一個初始步驟。二分查找比線性查找要快的多,然而它只能應用於有序的數據。其次排序非常重要也可能非常耗時。
冒泡排序、選擇排序和插入排序都是簡單排序,算法時間複雜度都是O(n^2)。
選擇排序:
第1次循環遍歷範圍是[1,n]選出最小的,與最左邊[0]交換;
第2次循環遍歷範圍是[2,n]選出最小的,與最左邊[1]交換;
............................................................................................
第n-1循環遍歷範圍[n-1,n]選出最小的,與最左邊[n-1]交換;
顯然比較的次數還是O(n^2) ,但是交換的次數卻是O(N);
所以選擇排序和冒泡排序相比比較次數都是O(n^2),但是選擇排序無疑更快,因爲它進行的交換要少得多,是O(N)級的。
java代碼:
/**
* 選擇排序
* 概念:1 遍歷範圍是[1,n]選出最小的,與最左邊[0]交換;
* 2 遍歷範圍是[2,n]選出最小的,與最左邊的[1]交換
* ....
* n-1 遍歷範圍[n-1,n]選出最小的,與最左邊的[n-1]交換;
* <p>
* 顯然比較的次數還是O(N方) ,但是交換的次數卻是O(N);
* <p>
* 所以選擇排序和冒泡排序比較次數都是O(N方),但是選擇排序無疑更快,因爲它進行的交換要少得多
*/
public class SelectionSort {
public static void main(String[] args) {
int sore[] = {3, 1};
for (int i = 0; i < sore.length; i++) {
int min = i; //假定當前座標對應的值最小
for (int j = i + 1; j < sore.length; j++) {
if (sore[min] > sore[j]) {
min = j;
}
}
if (min != i) { //因爲每次都是從最左邊開始 若min不等於i,說明找到最小值 交換
int temp = sore[i];
sore[i] = sore[min];
sore[min] = temp;
}
}
System.out.println("選擇排序後(從小到大):");
for (int i = 0; i < sore.length; i++) {
System.out.println(sore[i] + "\t");
}
}
}
如果有問題,請及時指出。