ソートアルゴリズム-ヒップホップソート



ヒップ位置合わせ(Heap Sort)

  • ヒップソートは、比較に基づくソートアルゴリズムである.
  • 選択ソートアルゴリズムに似たソート領域と非ソート領域を分離し、最大要素を検索してソート領域に配置します.(昇順)
  • 選択並べ替えに比べて,改良点は線形時間を必要とする選択並べ替えの探索とは異なり,hip資料構造を用いて最低価格を探索した.
  • 選択ソート時間複雑度:O(N^2)
  • ヒップホップ並べ替え時間複雑度:O(nlog(n)

  • 時間の複雑さ

  • 最適:O(nlog(n)
  • 最悪:O(nlog(n))
  • 長所


    最悪の場合でも、O(nlog(n))の高速度が保証されます.
  • には追加のメモリは必要ありません.
  • 短所

  • ソート間のデータの安定性は保証されません.不安定なアルゴリズム
  • は、データを繰り返す場合に順序を変更します.
  • データの状態によっては、他のソート方法よりも遅い場合があります.
  • インプリメンテーション

    function HeapSort(arr) {
      for (let i = parseInt(arr.length / 2); i >= 0; i--) {
        Heapify(arr, i);
      }
    
      for (let i = arr.length - 1; i > 0; i--) {
        [arr[0], arr[i]] = [arr[i], arr[0]];
        Heapify(arr, 0, i);
      }
    
      return arr;
    }
    
    function Heapify(arr, idx, length = arr.length) {
      let leftIdx = idx * 2 + 1;
      let rightIdx = idx * 2 + 2;
      let max = idx;
    
      if (leftIdx < length && arr[leftIdx] > arr[max]) {
        max = leftIdx;
      }
    
      if (rightIdx < length && arr[rightIdx] > arr[max]) {
        max = rightIdx;
      }
    
      if (max !== idx) {
        [arr[idx], arr[max]] = [arr[max], arr[idx]];
        Heapify(arr, max, length);
      }
    
      return arr;
    }
    
    console.log(HeapSort([6, 5, 3, 1, 8, 7, 2, 4]));