運行時間與輸入無關。爲了找出最小的元素而掃描一遍數組並不能爲下一遍掃描提供什麼信息,即使一個已經有序的數組和一個隨機排列的數組所用的排序時間也是同樣的。數據移動是最少的。每次交換都會改變兩個元素的值,所以選擇排序用了 N 次交換。算法
代碼實現數組
public static void sort(int[] a) {
// 將 a[] 按升序排列
int len = a.length;
for (int i = 0; i < len; i++) {
int min = i;
for (int j = i + 1; j < len; j++) {
if (a[min] > a[j]) {
a[min] = a[min] ^ a[j]; // 進行交換
a[j] = a[min] ^ a[j];
a[min] = a[min] ^ a[j];
}
}
}
}
複製代碼
測試bash
public static void main(String[] args) {
int[] a = {5,2,3,1,4,6,10};
sort(a);
for(int i = 0;i < a.length;i++){
System.out.print(a[i] + " ");
}
}
複製代碼
排序效果測試