排序算法之簡單選擇排序

這裏是傳送門⇒總結:關於排序算法html



平均時間複雜度 最優時間複雜度 最差時間複雜度 空間複雜度 穩定性
簡單選擇排序 O(n2) O(n2) O(n2) O(1) 不穩定


  • 算法描述
    • 從未排序區間中選擇鍵值最小的元素,將這個元素放在已經排序好的區間的末尾
    • 重複上述操做,直到待排序列排序完畢
  • JS實現
// 使用公用函數Swap
// 交換array[i]和array[j]
function Swap(array, i, j) {
    var temp = array[i];
    array[i] = array[j];
    array[j] = temp;
}

// 此處傳入的array會被直接改變
function SelectSort(array) {
    var len = array.length;
    for (var i = 0; i < len - 1; i++) {
        var min = i;
        for (var j = i + 1; j < len; j++) {
            if (array[min] > array[j]) {
                min = j;
            }
        }
        if (min != i) {
            Swap(array, i, min);
        }
    }
}
  • 分析
    • 無論待排序列狀況如何,因爲要找出最小值,鍵值比較總要遍歷整個未排序區間,因此鍵值比較的次數老是屬於O(n2)的,因此時間複雜度老是O(n2),但其實數據移動的次數會比冒泡排序少不少
    • 該排序屬於原地排序,空間複雜度S(n) = O(1)
    • 乍一看以爲這個算法是穩定的,但其實只要是「序列倒數第二位和序列倒數第二位以前的某個數同樣,且都是這個序列的最大值」這種狀況,好比 [2,4,3,4,1],它就不能維持其穩定性,因此簡單選擇排序是不穩定的
相關文章
相關標籤/搜索