ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

插入排序

2022-06-18 17:33:22  阅读:148  来源: 互联网

标签:arr handle 插入排序 length let result array


插入排序思路

利用抓牌的思路去想

从后面插入方式

    // 从后向前比较的情况
    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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有