插入排序

說明

每次都將當前元素插入到左側已經排序的數組中,使得插入之後左側數組依然有序。當數組[3,4,1]排序時,先將[3]歸爲已排序的數組,[4,1]爲未排序數組,遍歷未排序數組,先取4和3比較,正序排序就不變,反序就交換兩個值。…遍歷完成,已排序數組越來越大,未排序數組越來越少。直到排序完成。

時間複雜度

插入排序的時間複雜度取決於數組的初始順序,如果數組已經部分有序了,那麼逆序較少,需要的交換次數也就較少,時間複雜度較低。

示例

function insertion(nums: number[]) {
    let len = nums.length;
    for (let i = 1; i < len; i++) {
        for (let j = i; j > 0; j--) {
            //  交換兩個值 判斷條件 正序反序 
            if (nums[j] < nums[j - 1]) {
                swapInsertion(nums, j, j - 1);
            }
        }
    }
    return nums;
}




/**
 * 交換數組中兩個值
 * @param {number[]} nums -js中數組是引用類型
 * @param {number} i
 * @param {number} min
 */
function swapInsertion(nums: number[], i: number, min: number) {
    var swapValue = nums[i];
    nums[i] = nums[min];
    nums[min] = swapValue;
}


const insertionNumbers = [3, 4, 1];
console.log(insertion(insertionNumbers));

排序示例

步驟 已排序 未排序 總數組
1 [3] [4,1] [3,4,1]
2 [3,4] [1] [3,4,1]
3 [1,3,4] [] [1,3,4]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章