堆排序分析(JavaScript代碼實現)

來源:互聯網
上載者:User

標籤:htc   額外   排序   soft   最小堆   最大的   ges   歸併排序   build   

  • 堆排序的時間複雜度是O(nlgn),與歸併排序一樣,但它又與插入排序一樣具有空間原址性:任何時候都只需要常數個額外的元素空間儲存臨時資料。
  • 什麼是堆?一般堆用數組儲存,表現出近似完全二叉樹形式,樹上的每一個結點對應數組中的一個元素。除了最底層外,該樹是完全充滿的且從左至右填充。
  1. 堆又分為最大堆和最小堆。最大堆:除了根以外的所有節點i都要滿足A[parent(i)]>=A[i],即堆中最大元素是根節點。對應的,最小堆:除了根以外的所有節點i都要滿足A[parent(i)]<=A[i],即堆中最小元素是根節點。     一般在堆排序中用最大堆,最小堆用來構造優先序列。
  2. 定義堆中節點的高度:該節點到分葉節點最長簡單路徑上邊的數目。則包含n個元素的堆其高度為lgn。
  3. 維護堆的性質、方法:(預設數組下標從1開始)
    • maxHeapify:時間複雜度為O(lgn)。通過讓A[i]的值在最大堆中“逐級下降”,從而使得以下標i為根節點的子樹重新遵循最大堆性質。
      function maxHeapify(arr, i) {   let largest;   let left = i * 2; // leftChild   let right = i * 2 + 1; // rightChild   if( left <= arr.length && arr[i] < arr[left] ) {     largest = left;     } else {     largest = i;   }   if( right <= arr.length && arr[largest] < arr[right] ) {     largest = right;   }   if ( largest !== i ) {     arr[i] = arr[i] + arr[largest];
      arr[largest] = arr[i] - arr[largest];
      arr[i] = arr[i] - arr[largest]; maxHeapify(arr, largest); }}

       

       

    • buildMaxHeap:建最大堆。時間複雜度為O(n)。用自底向上的方法利用maxHeapify把大小為n的數群組轉換為最大堆。因為最後一個分葉節點序號為n,則其父節點序號為n/2,所以子數組[n/2+1,....,n]都是堆的分葉節點,所以迴圈從n/2開始遞減到1,每一次都保證節點i+1,i+2...,n都是一個最大堆的根節點的性質。
      function buildMaxHeap(arr) {  for (var i = arr.length / 2; i >= 1; i--) {    maxHeapify(arr,i);  }}

       

    • heapSort:堆排序演算法。先將數組arr建為一個最大堆,因為最大堆的根節點總是最大的,通過把它與arr[n]互換可以得到正確位置。可以算出時間複雜度為O(nlgn)。
      function heapSort(arr) {  let arrSort = [];  buildMaxHeap(arr);  let length = arr.length;  for (var i = length; i >= 2; i--) {    arr[1] = arr[i];    arrSort.push(arr[i]);    maxHeapify(arr, 1);  }  arrSort.push(arr[1]);  return arrSort;}

       

堆排序分析(JavaScript代碼實現)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.