js 實現排序算法 -- 希爾排序(Shell Sort)


原文:

  十大經典排序算法(動圖演示)

 

希爾排序

  1959年Shell發明,第一個突破O(n2)的排序算法,是簡單插入排序的改進版。它與插入排序的不同之處在於,它會優先比較距離較遠的元素。希爾排序又叫縮小增量排序

 

算法描述:

  將整個待排序的記錄序列分割成為若干子序列分別進行直接插入排序,具體算法描述:

  • 選擇一個增量序列t1,t2,…,tk,其中t1>t2>...,tk=1;
  • 按增量序列個數k,對序列進行k 趟排序;
  • 每趟排序,根據對應的增量ti,將待排序列分割成若干長度為m 的子序列,分別對各子表進行直接插入排序。僅增量因子為1 時,整個序列作為一個表來處理,表長度即為整個序列的長度。

 

圖形解釋:

代碼實現:

function shellSort(arr) {
  let len = arr.length;
  // gap 即為增量
  for (let gap = Math.floor(len / 2); gap > 0; gap = Math.floor(gap / 2)) {
    for (let i = gap; i < len; i++) {
      let j = i;
      let current = arr[i];
      while(j - gap >= 0 && current < arr[j - gap]) {
        arr[j] = arr[j - gap];
        j = j - gap;
      }
      arr[j] = current;
    }
  }
}


var arr = [3,5,7,1,4,56,12,78,25,0,9,8,42,37];
shellSort(arr);

 


免責聲明!

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



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