排序:插入排序

版权声明:任先阳 任 先 阳 任先 先阳,nvcc.cc、www.nvcc.cc、sbfox.com、www.sbfox.com https://blog.csdn.net/qq_39571197/article/details/84308123

从最简单的开始吧 

    const messArr = [4, 5, 6, 1, 3, 2, 7, 9, 8];
        /**
         * 逻辑:分成未排序[before]、已排序[after]的队列,每次从未排序的队列拿一个值[temp],在已经排序的队列中做比较,控制是否交换位置
         */
        function insertionSort(arr) {
            // 假如从i === 0开始,那么[after]为空,循环无意义,所以从i === 1开始
            for (let i = 1; i < arr.length; i++) {
                /**
                 * i === 1,[4]~[5, 6, 1, 3, 2, 7, 9, 8]
                 * i === 2,[4, 5]~[6, 1, 3, 2, 7, 9, 8]
                 * 假如i === 3,那么[after] = [4,5,6],此时[temp] === 1
                 */
                const temp = arr[i];
                let j = i - 1;
                /**
                 * 如果在[after]中,有比[temp]大的值,则把[after][J]这个值向后移动,
                 * 直到没有比temp大的值,此时将[temp]插入[after]队列
                 */
                while (j >= 0 && arr[j] > temp) {
                    arr[j + 1] = arr[j];
                    j--;
                }
                /**
                 * 根据while的条件可知,此时要么j < 0,要么 arr[j] < temp
                 * 假如while终止是因为j < 0,则代表j === 0 && arr[0] > temp成立,所以temp在[after]中是最小的
                 */
                arr[j + 1] = temp; // 在最后一次while中,执行了j--操作,所以需要+1
            }

            console.log(arr);
        }
        insertionSort(messArr);

另外,我在视频中学习到了一种插入排序,代码是这样的,不知道正不正经,这是插入排序吗? 

这种看起来更简单,但是性能肯定要差些,做了很多次变量交换

阅读更多

没有更多推荐了,返回首页