排序算法(七):希爾排序

概念

這是一個叫希爾的人想到的,所以叫做希爾排序,也稱遞減增量排序算法,是插入排序的一種更高效的改進版本。但希爾排序是非穩定排序算法。

邏輯

首先,選擇增量 gap = 10/2 = 5 把所有的數分成5組,對每組進行排序
縮小增量繼續以 gap = gap/2 = 2 把所有的數分成2組,對每組進行排序
通過這種方式,縮小這個數組的有序度,然後在對整個數組進行插入排序
用這種方式減小複雜度

代碼


     // 希爾算法
    function shell_sort(nums) {
      let len = nums.length;
      // 初始步數
      let gap = parseInt(len / 2);
      // 逐漸縮小步數
      while (gap) {
        // 從第gap個元素開始遍歷
        for (let i = gap; i < len; i++) {
          // 逐步其和前面其他的組成員進行比較和交換
          for (let j = i - gap; j >= 0; j -= gap) {
            if (nums[j] > nums[j + gap]) {
              [nums[j], nums[j + gap]] = [nums[j + gap], nums[j]];
            }
            else {
              break;
            }
          }
        }
        gap = parseInt(gap / 2);
      }
    }
    var sortArr = [9, 6, 3, 5, 2, 1, 7, 9999, 343, 6, 643, 243, 544, 5, 63, 234, 0, 56, 123]
    shell_sort(sortArr)
    console.log(sortArr)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章