其他分享
首页 > 其他分享> > 插入排序

插入排序

作者:互联网

插入排序思路

利用抓牌的思路去想

从后面插入方式

    // 从后向前比较的情况
    function insert(array) {
        // 先准备一个空数组 拿牌
        let handle = [];
        // 先拿到第一张 这个是必须要有一张  需要下面循环的时候拿到一个进行比较
        handle.push(array[0]);
        // 对要进行排序的数组(要抓的牌)进行循环 要从1开始循环,因为第一项已经拿出来了
        for (let i = 1; i < array.length; i++) {
            // 抓到的牌/跟手里已有的牌进行比较 (从后向前比)
            for (let j = handle.length - 1; j >= 0; j--) {
                // 将抓到的牌进行比较
                if (array[i] > handle[j]) {
                    // 抓到的牌 比手里的牌大 ,放到当前牌的后面 也就是handle[j]的后面
                    handle.splice(j + 1, 0, array[i])
                    break;
                }
                // 如果j=0时 说明已经到了最前面 只需要放到最前面即可
                if (j === 0) {
                    handle.unshift(array[i])
                }
            }
        }
        return handle
    }
    let array = [12, 8, 24, 16, 1]
    console.log(insert(array), '插入排序')

从前面插入方式

   function insertiSort(arr) {
        // 第一张牌是有序的直接放入数组
        const result = [arr[0]];
        const {
            length
        } = arr;
        // 这层循环是模拟发除第一张牌以外剩下的牌
        for (let i = 1; i < length; i++) {
            const oldLen = result.length;
            // 这层循环是将新发下来的牌与手里的每一张牌比较看看它比哪张大,比哪张小。
            for (let j = 0; j < oldLen; j++) {
                // 只要这张牌比与他比较的牌小
                if (result[j] > arr[i]) {
                    // 就插入在这张牌之前
                    result.splice(j, 0, arr[i]);
                    // 插入之后结束本轮比较
                    break;
                }
                // 否则接着比较
            }
            // 比所有的都大说明没有插入手牌说明手里的牌没有增多
            if (oldLen === result.length) {
                result.push(arr[i]);
            }
        }
        return result;
    }
    //测试一下
    console.log(insertiSort([1, 3, 2, 6, 4, 5]));

whil方法

 // 第三种方法
    function insertionSort(arr) {
        //外层循环:拿到标记的元素
        for (let i = 0; i < arr.length; i++) {
            let temp = arr[i];
            //内层循环:从后往前比较元素的大小
            let j = i;
            while (arr[j - 1] > arr[j] && j > 0) {
                arr[j] = arr[j - 1];
                j--;
            }
            //最后便将其插入进去即可
            arr[j] = temp;
        }
        return arr;
    }

    //测试一下
    console.log(insertionSort([1, 3, 2, 6, 4, 5]));

效果展示

标签:arr,handle,插入排序,length,let,result,array
来源: https://www.cnblogs.com/loveliang/p/16388816.html