來自《算法》中關於選擇排序的描述:首先找到數組中最小的元素,將它和數組的第一個元素交換位置。其次,在剩下的元素中找到最小的元素,將它與數組的第二個元素交換位置。如此往復,直到整個數組排序。這就是選擇排序。
話不多說,上代碼片段吧。
public static void selectionSort(int[] arr) {
// 外層循環,每次循環都要確定當前索引的最值元素
for (int i = 0; i < arr.length; i++) {
// 最小值索引
int index = i;
// 內層循環獲取當前index後最小值
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[index]) {
index = j;
}
}
// 交換當前i和index所對應的值
int temp = arr[index];
arr[index] = arr[i];
arr[i] = temp;
}
}
選擇排序原理和實現很簡單,但它的缺點就是,即使原數組已經是有序的,程序也會象徵性的走一遍,這點非常糟糕。優點就是它僅需要N次交換即可實現排序。算法整體時間複雜度是O(n2)。