數組排序的幾種方法


// 冒泡排序
let arr = [10, 20, 40, 60, 60, 0, 30];
/*
 * 總共比較次數為arr.length-1次
 * 每次的比較次數為arr.length-1次
 * 依次遞減
 */
let temp; //交換變量標識
// 兩層for分別表示當前項與第二項
for (let i = 0; i < arr.length - 1; i++) {
  for (let j = 0; j < arr.length - 1; j++) {
    // 如果當前項大於第二項(后一項)則交換
    if (arr[j] > arr[j + 1]) {
      temp = arr[j];
      arr[j] = arr[j + 1];
      arr[j + 1] = temp;
    }
  }
}
// 打印排序后的數組
console.log(arr); //[0, 10, 20, 30, 40, 60, 60]

// 選擇排序
let arr2 = [10, 20, 40, 60, 60, 0, 30];
let temp2; //交換變量標識
// 兩層for分別表示當前項與第二項
for (let i = 0; i < arr2.length - 1; i++) {
  for (let j = i + 1; j < arr2.length; j++) {
    // 假設第二項是最小值(是則交換/否則繼續比較)
    if (arr2[i] > arr2[j]) {
      temp2 = arr2[i];
      arr2[i] = arr2[j];
      arr2[j] = temp2;
    }
  }
}
// 打印排序后的數組
console.log(arr2); //[0, 10, 20, 30, 40, 60, 60]

// 希爾排序算法
function xier(arr) {
  let interval = parseInt(arr.length / 2); //分組間隔設置
  while (interval > 0) {
    for (let i = 0; i < arr.length; i++) {
      let n = i;
      while (arr[n] < arr[n - interval] && n > 0) {
        let temp = arr[n];
        arr[n] = arr[n - interval];
        arr[n - interval] = temp;
        n = n - interval;
      }
    }
    interval = parseInt(interval / 2);
  }
  return arr;
}
let arr3 = [10, 20, 40, 60, 60, 0, 30];
// 打印排序后的數組
console.log(xier(arr3));

// sort排序
let arr4 = [10, 20, 40, 60, 60, 0, 30];
arr4.sort(function (a, b) {
  /*
   * return b-a; —> 降序排序
   * return a-b; —> 升序排列
   */
  return a - b;
});
//括號里不寫回調函數則默認按照字母逐位升序排列
// 打印排序后的數組
console.log(arr4); //[0, 10, 20, 30, 40, 60, 60]

// 插入排序
let arr5 = [10, 20, 40, 60, 60, 0, 30];
for (let i = 0; i < arr5.length; i++) {
  let n = i;
  while (arr5[n] > arr5[n + 1] && n >= 0) {
    let temp = arr5[n];
    arr5[n] = arr5[n + 1];
    arr5[n + 1] = temp;
    n--;
  }
}
// 打印排序后的數組
console.log(arr5); //[0, 10, 20, 30, 40, 60, 60]

 


免責聲明!

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



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