js排序算法基礎--冒泡排序


冒泡排序

冒泡排序就是比較任何兩個相鄰的項,如果第一個比第二個大,則交換它們。元素項向上移動至正確的順序,就好像氣泡上升至表面一樣,冒泡排序因此得名。

冒泡排序實現:

function bubbleSort(array){
    var length = array.length;
    for (var i = 0; i < length; i++) {            //控制數組經過了多少輪排序
        for (var j = 0; j < length - 1; j++) {      //進行了當前項和下一項的比較
            if (array[j] > array[j + 1]) {
                swap(array, j, j + 1)
            }
        }
    }
};

function swap (array, index1, index2) {
    var aux = array[index1];
    array[index1] = array[index2];
    array[index2] = aux;

    //ES6寫法
    [array[index1], array[index2]] = [array[index2], array[index1]];
}

我們可以看到外層的循環主要是控制了數組中經過了多少輪循環(數組中的,每一項都經過一輪,輪數和數組的長度是一致的)。然后內循環將從第一位迭代到倒數第二位,內循環實際上進行當前項與下一項的比較,如果當前項比下一項大,則交換它們。

我們還可以發現當外循環完成一輪,最后一項就已經在正確的位置(即為最大項),然而在后續的循環中,還一直進行着比較,所以我們可以改進一下

思路:

如果內循環減去外循環的輪數,就可以避免內循環中所有不必要的比較
function modifiedBubbleSort() {
    var length = array.length;
    for (var i = 0; i < length; i++) {
        for (var j = 0; j < length - 1 - i; j++) {
            if (array[j] > array[j + 1]) {
                swap(array, j, j + 1)
            }
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM