1. 程式人生 > 其它 >陣列排序方法總結

陣列排序方法總結

let arr = [12, 14, 145, 167, 32, 1, 90, 78];

1、sort 排序

//升序
arr.sort((a,b) => {return a - b;})

//降序
arr.sort((a,b) => {return b - a;})

2、氣泡排序

實現思路: 1. ⽐較相鄰的元素。如果第⼀個⽐第⼆個⼤,就交換他們兩個。 2. 對每⼀對相鄰元素作同樣的⼯作,從開始第⼀對到結尾的最後⼀對。這步做完後,最後的元素會是最⼤的數。 3. 針對所有的元素重複以上的步驟,除了最後⼀個。 4. 持續每次對越來越少的元素重複上⾯的步驟,直到沒有任何⼀對數字需要⽐較。
function morkArr(arr){  
if(!arr.length) return
  var newArr;
  for(let i = 0; i < arr.length;i++){
    for(let j = 0; j < arr.length - 1; j++){
      if(arr[j] > arr[j + 1]){      
        newArr = arr[j];        
        arr[j] = arr[j + 1];
        arr[j + 1] = newArr;
      }
    }
  }  
  return arr;
}
//優化版
function morkArr1(arr){  
  if(!arr.length) return
 var newArr;
  
  for(let i = 0; i < arr.length;i++){
    let flag = false;
    for(let j = 0; j < arr.length - 1; j++){
      if(arr[j] > arr[j + 1]){
        newArr = arr[j];
        
        arr[j] = arr[j + 1];
        arr[j + 1] = newArr;
        flag = true;  
      }    
    }
   
    //如果沒有交換過元素,則已經有序 
    if(!flag) continue     
}
  
  return arr;
}
3、快排 實現思路: 以陣列中間位置為基礎,迴圈比對,比中間小放左側,如果比中間值大,則放到右側陣列中 此時第一輪後將陣列分為 左側 + 中間 + 右側 分別對左側陣列執行以上兩步操作,直到拆不出陣列位置 最後拼接陣列

function quickSort(arr) {

if (arr.length <= 1) {

return arr;

}

let centerIndex = Math.floor(arr.length / 2),

 centerVal = arr.splice(centerIndex, 1)[0];

let leftArr = [],

   rightArr = [];

  for (let i = 0; i < arr.length; i++) {

    if (arr[i] <= centerVal) {

      leftArr.push(arr[i]);

    } else {

      rightArr.push(arr[i]);

    }

  }

  return quickSort(leftArr).concat(centerVal, quickSort(rightArr));

}

4、插入排序 實現思路: 首先從第一元素後面與前面對比,如果後面小於前面元素,該元素往前插入,依次類推, 已排序最後一個與後面元素對比,依次插入 function insertSort(arr){   for(let i = 0; i < arr.length; i++){     let key = arr[i];     let j = i - 1;     while(j >= 0 && arr[j] > key){       arr[j + 1] = arr[j];       j --     }     arr[j + 1] = key   }   return arr }