1.實現流程:?
1. 把第一個沒有排序過的元素設置為最小值;
2.?遍歷每個沒有排序過的元素;
3.?如果元素 < 現在的最小值;
4.?將此元素設置成為新的最小值;
5.?將最小值和第一個沒有排序過的位置交換
選擇排序執行流程
2.代碼實現
let arr = [17,25,25,28,38,3,43,43,35,45,5]function chooseSort() {let indexMin = 0;// 選擇n-1次for (let i=0; i<arr.length-1; i++) {let indexMin = i;for (let j=i+1; j<arr.length; j++) {if (arr[j]<arr[indexMin]) {indexMin = j;}}if (indexMin != i) {let temp = arr[i];arr[i] = arr[indexMin];arr[indexMin] = temp;}}console.log(arr)}chooseSort()
運行結果:
3.復雜度分析
1. 時間復雜度:找出執行次數最多的語句即可
if (arr[j]<arr[indexMin]) {indexMin = j;
}
基于上述每一趟比較的次數,可以得到總的比較次數,就是這個判斷語句執行的次數
=> 當i=0時, 需要比較n-1-0次
? ? ?當i=1時,需要比較n-1-1次
? ? ?......
? ? ?當i=n-3時, 需要比較n-1-(n-3) = 2
? ? ?當i=n-2時, 需要比較n-1-(n-2) = 1
? ? ?當i=n-1時, 需要比較n-1-(n-1) = 0
=> ?(n-1)+(n-2)+(n-3)+...+1+0 = [n(n-1)]/2 ?= n^2/2 - n/2 + 1/2
=> 去掉系數、低階和常量 ?
=> 則時間復雜度為 ?O(n^2)
2. 空間復雜度: 冒泡排序中并沒有用到額外的空間,所以空間復雜度為 O(1)
3. 冒泡排序是不穩定的排序算法:從上述的視頻可以看出,數組中有兩個43,然而在排完序后,原本前面的43跑到了后面