簡明算法: 冒泡排序(javascript描述)

懶惰了好久,人有點生鏽,因此寫個算法系列讓本身腦筋活躍起來。算法

(全部範例一概從小到大排序)數組

冒泡排序測試

給定數組:code

var list = [ 54, 26, 93, 17, 77, 31, 44, 88, 55, 20 ];

算法描述:排序

  1. 將第一個元素與第二個元素對比,此時第一個元素比第二個元素大,交換他們,這樣較大的元素就位於第二個位置了;io

    list = [ 26, 54, 93, 17, 77, 31, 44, 88, 55, 20 ];
  2. 將第二個元素與第三個元素對比,此時第二個元素比第三個元素小,保持原樣不變;console

    list = [ 26, 54, 93, 17, 77, 31, 44, 88, 55, 20 ];
  3. 重複上面的步驟,直到最後咱們用倒數第二個元素與倒數第一個元素相比以後,通過第一輪排序,最大的元素93被移動到了數組最後;function

    list = [ 26, 54, 17, 77, 31, 44, 88, 55, 20, 93 ];
  4. 而後咱們重複1,2,3步驟;通過第二輪咱們會找到次大的元素排在倒數第二位,即88被移動到了數組倒數第二位;循環

    list = [ 26, 17, 54, 31, 44, 77, 55, 20, 88, 93 ];
  5. 再次重複直到整個數組有序;語法

    第1輪: [ 26, 54, 17, 77, 31, 44, 88, 55, 20, 93 ]
    第2輪: [ 26, 17, 54, 31, 44, 77, 55, 20, 88, 93 ]
    第3輪: [ 17, 26, 31, 44, 54, 55, 20, 77, 88, 93 ]
    第4輪: [ 17, 26, 31, 44, 54, 20, 55, 77, 88, 93 ]
    第5輪: [ 17, 26, 31, 44, 20, 54, 55, 77, 88, 93 ]
    第6輪: [ 17, 26, 31, 20, 44, 54, 55, 77, 88, 93 ]
    第7輪: [ 17, 26, 20, 31, 44, 54, 55, 77, 88, 93 ]
    第8輪: [ 17, 20, 26, 31, 44, 54, 55, 77, 88, 93 ]
    第9輪: [ 17, 20, 26, 31, 44, 54, 55, 77, 88, 93 ]

算法實現:

function bubble(list) {
  // 開啓length-1輪循環,由於最後一輪只剩一個元素,不必比較
  for (let i = 0; i < list.length - 1; i++) {
    // 兩兩對比,每次循環時j的取值上限須要捨去尾部已經有序的數據,因此length-1-i
    for (let j = 0; j < list.length - 1 - i; j++) {
      if (list[j] > list[j + 1]) {
        // ES6語法 交換元素
        [list[j], list[j + 1]] = [list[j + 1], list[j]];
      }
    }
  }
}

// 測試
var list = [ 54, 26, 93, 17, 77, 31, 44, 88, 55, 20 ];
bubble(list);
console.log(list);
// [ 17, 20, 26, 31, 44, 54, 55, 77, 88, 93 ]
相關文章
相關標籤/搜索