JS冒泡排序

2019-04-03  本文已影响0人  Simon_King

写个冒泡排序

写就写嘛,走你!

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;
}
上一篇下一篇

猜你喜欢

热点阅读