美文网首页
JS冒泡排序

JS冒泡排序

作者: Simon_King | 来源:发表于2019-04-03 21:39 被阅读0次

    写个冒泡排序

    写就写嘛,走你!

    function bubbleSort(arr) {
        let count = 0; //统计循环次数
        for(let i = arr.length; i > 0; i--) { // 从最后一个选起
            for (let j = 0; j < i; j++) { // 限定对比的范围
                 // 前一个和后一个对比,如果前一个大于后一个,就调换位置
                if (arr[j] < arr[j + 1]) {
                    const temp = arr[j]; // 缓存前一个
                     // 删除最后一个,插入一样的前一个,这个时候2个都是前一个一样的值
                    arr.splice(j, 1, arr[j + 1]);
                    arr.splice(j + 1, 1, temp); // 删除后一个,把缓存的前一个插入
                    
                    /* 这样也是可以的嘛,目的都是调换位置
                    arr[j] = arr[j + 1];
                    arr[j+1] = temp;
                    */
                }
                count++;
            }
        }
        console.log(`循环次数为:${count}次`);
        return arr;
    }
    

    能优化一下吗

    ??? 什么鬼, 这个还可以优化?
    经过3天3夜的思考,掉了300根头发,发现好像每一次遍历都不用跟前面一个再比了

    function bubbleSort(arr) {
        let count = 0; //统计循环次数
        for(let i = arr.length; i > 0; i--) { // 从最后一个选起
            for (let j = 0; j < i - 1; j++) { // ** 就在这,减1就好了,可以节省循环
                 // 前一个和后一个对比,如果前一个大于后一个,就调换位置
                if (arr[j] < arr[j + 1]) {
                    const temp = arr[j]; // 缓存前一个
                     // 删除最后一个,插入一样的前一个,这个时候2个都是前一个一样的值
                    arr.splice(j, 1, arr[j + 1]);
                    arr.splice(j + 1, 1, temp); // 删除后一个,把缓存的前一个插入
                    
                    /* 这样也是可以的嘛,目的都是调换位置
                    arr[j] = arr[j + 1];
                    arr[j+1] = temp;
                    */
                }
                count++;
            }
        }
        console.log(`循环次数为:${count}次`);
        return arr;
    }
    

    相关文章

      网友评论

          本文标题:JS冒泡排序

          本文链接:https://www.haomeiwen.com/subject/evmtiqtx.html