排序算法之直接插入排序

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



平均時間複雜度 最優時間複雜度 最差時間複雜度 空間複雜度 穩定性
直接插入排序 O(n2) O(n) O(n2) O(1) 穩定


  • 算法描述
    • 依次將值插入到已經排好序的區間中它應該待的位置,從而使有序區間長度依次+1
    • 尋找某個值在有序區間的位置採用的是讓其與有序區間中的元素比較大小並不斷把已排序好的元素向後移的方式
    • 尋找位置這個操做應該是從第二位數字開始的,由於一開始有序區間爲空,第一位數字就直接放進去了,不須要尋找位置
  • JS實現
// 此處傳入的array會被直接改變
function InsertionSort(array) {
    var len = array.length;
    for (var i = 1; i < len; i++) {
        var temp = array[i];
        for (var j = i; j > 0 && temp < array[j - 1]; j--) {
            array[j] = array[j - 1];
        }
        array[j] = temp;
    }
}
  • 分析
    • 任何狀況下都是兩層循環,時間複雜度T(n) = O(n2)
    • 該排序屬於原地排序,空間複雜度S(n) = O(1)
    • 由於是隻有小於前面的數纔會日後移,即遇到相等的數字不會讓其後移,因此直接插入排序是穩定的
  • 優化
    • 增長一個哨兵位,能夠讓尋找某個值在有序區間的位置這個過程當中不需擔憂數組下標越界問題,即少了「j>0」這一步,但須要在待排序列中爲哨兵位空出第一個位置
相關文章
相關標籤/搜索