【排序】圖解選擇排序
阿新 • • 發佈:2018-11-29
一、思想
首先,找到陣列中最小的那個元素,其次,將它和陣列的第一個元素交換位置(如果第一個元素就是最小元素那麼就和自己交換)。在剩下的元素中找到最小的元素,將它與陣列的第二個元素交換位置。如此往復,直到將整個陣列排序。這種方法叫做選擇排序,因為它在不斷地選擇剩餘元素之中的最小者。
二、圖解過程
三、核心程式碼
//選擇排序演算法
public static void selectionSort(int[] arr) {
//不滿足交換條件
if (arr == null || arr.length < 2) {
return;
}
for (int i = 0; i < arr.length - 1; i++) {
//尋找當前迴圈最小元素的下標
int minIndex = i;
for (int j = i + 1; j < arr.length; j++) {
minIndex = arr[j] < arr[minIndex] ? j : minIndex;
}
swap(arr, i, minIndex);
}
}
//交換陣列中的兩個元素
public static void swap(int[] arr, int i, int j) {
int tmp = arr[i];
arr[i] = arr[ j];
arr[j] = tmp;
}
四、複雜度分析
1、時間複雜度:O(N^2)
若待排序的元素總數為N,第一次內迴圈比較N-1次(與除了本身的所有元素進行比較,找出最值),第二次內迴圈比較N-2次,以此類推,最後一次內迴圈比較1次。總共比較(N-1) + (N-1) + ... + 1
次,等差求和,時間複雜度為O(N^2)
。
2、額外空間複雜度:O(1)
未藉助其它輔助空間。