冒泡排序

 window.onload = function() {

            var arr = [2,4,9,1,7,3,6,8,5]

            // 冒泡排序 
            bubbleSort(arr)
            // 優(yōu)化后的冒泡排序
            bubbleSortNew(arr)
        }

        // 冒泡排序
        function bubbleSort(arr) {
            var list = [...arr]
            // 外層進(jìn)行數(shù)組長(zhǎng)度-1輪循環(huán)
            for (let i = 0; i < list.length - 1; i++) {
               console.log(`第${i}輪`)
               // 內(nèi)層每輪進(jìn)行數(shù)組長(zhǎng)度-1-第幾輪次循環(huán)比較
                for (let j = 0; j < list.length - 1 - i; j++) {
                    console.log(`第${j}次比較`)
                    if (list[j] > list[j + 1]) {
                        // 當(dāng)前一個(gè)的值大于后一個(gè)的值進(jìn)行交換
                        swap(list, j, j + 1)
                    }
                }
                
            }
            console.log(list) // [1, 2, 3, 4, 5, 6, 7, 8, 9]
        }

        // 優(yōu)化后的冒泡排序
        function bubbleSortNew(arr) {
            console.log('~~~~~~~~~~~~~~~~~~')
            var list = [...arr]
            // 數(shù)組長(zhǎng)度-1 記錄內(nèi)層循環(huán)的第一輪循環(huán)次數(shù)
            var num = arr.length - 1
            // 記錄外層循環(huán)輪數(shù)(只用來(lái)打印日志)
            var m = 0
            while (true) {
                console.log(`第${m}輪`)
                m++
                // 記錄最后一次交換時(shí),數(shù)值所在的索引
                var last = 0
                for (let i = 0; i < num; i++) {
                    console.log(`第${i}次比較`)
                    if (list[i] > list[i+1]) {
                        swap(list, i, i + 1)
                        last = i
                    }
                    
                }
                // 將最后一次交換時(shí)數(shù)值所在的索引給到num,用于下次循環(huán)的次數(shù)
                num = last
                // 當(dāng)num為0時(shí)說(shuō)明已經(jīng)結(jié)束,跳出外層循環(huán)
                if (num == 0 ) {
                    break
                }
            }
            console.log(list) // [1, 2, 3, 4, 5, 6, 7, 8, 9]

        }

        // 交換兩個(gè)值
        function swap(arr, i, j) {
            var tmp = arr[i]
            arr[i] = arr[j]
            arr[j] = tmp
        }

對(duì)比以上兩種方式發(fā)現(xiàn),優(yōu)化后的冒泡排序的循環(huán)次數(shù)比沒(méi)優(yōu)化的少進(jìn)行了3輪外層循環(huán);

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容