1. 程式人生 > 實用技巧 >氣泡排序之基礎優化

氣泡排序之基礎優化

  • 普通版本
function doubleSort(arr) {
  let len = arr.length - 1;
  for(let i=0; i<arr.length; i++) {   // 第一層迴圈遍歷總次數
    for(let j=0; j<len-i; j++) {    // 第二層迴圈 從左往右 j 與 j + 1 數值比較 
      if(arr[j] > arr[j+1]) {
         let temp = arr[j];
        arr[j] = arr[j+1]
        arr[j+1] = temp;
      }
    }
  }
  
return arr; }
  • 優化版本(一)
function doubleSort(arr) {
    let len = arr.length - 1;
    let isExchange;            // 增加標誌位欄位,判斷後面對比是否進行數值交換,如果沒有交換,代表是有序,否則代表無序
    for(let i=0; i<arr.length; i++) {
        isExchange = true;       // 每次迴圈開始,都是為 true, 交換之後才置為 false
        for(let j=0; j<len; j++) {
            
if(arr[j] > arr[j+1]) { let temp = arr[j]; arr[j] = arr[j+1] arr[j+1] = temp; isExchange = false; } } if(isExchange) {    // 如果有序後面就不要迴圈對比了,直接跳出 break; }; } return arr; }
  • 優化版本(二)
function doubleSort(arr) {
    let len = arr.length - 1;
    let isExchange,sortLine;    //  記錄最後一次交換的位置,減少下次內部迴圈的次數
    for(let i=0; i<arr.length; i++) {
        isExchange = true;
        for(let j=0; j<len; j++) {
            if(arr[j] > arr[j+1]) {
                let temp = arr[j];
                arr[j] = arr[j+1]
                arr[j+1] = temp;
                isExchange = false;
                sortLine = j;
            }
        }
        len = sortLine;
        if(isExchange) {
            break;
        };
    }
    return arr;
}

高階版本優化 之 雞尾酒排序,期待 !