js實現(xiàn)堆排序

/**

? ? * 堆排序 時間復(fù)雜度O(nlogn)

? ? * 初始化建堆O(n) 排序重建堆O(nlogn)

? ? *

? ? * @param {any} arr

? ? * @returns

? ? *

? ? * @memberof sort

? ? */

? ? sort7(arr){

? ?   var len = arr.length;

? ?   var tem;

? ?   this.buildMaxHeap(arr);

? ?   for(var i = len - 1; i > 0; i --){

? ?     tem = arr[i];

? ?     arr[i] = arr[0];

? ?     arr[0] = tem;

? ?     this.maxHeap(arr, 0 , --len);

? ?   }

? ?   return arr;

? ? }

? ? /**

? ? * 建立最大堆

? ? *

? ? * @param {any} arr

? ? *

? ? * @memberof sort

? ? */

? ? buildMaxHeap(arr){

? ?   var lastFather = Math.floor(arr.length / 2) - 1;//堆的最后一個父節(jié)點

? ?   for(var i = lastFather; i > 0; i --){

? ?     this.maxHeap(arr, i, arr.length);

? ?   }

? ? }

? ? /**

? ? * 對重建堆排序

? ? *

? ? * @param {any} arr

? ? * @param {any} index

? ? * @param {any} heapSize

? ? *

? ? * @memberof sort

? ? */

? ? maxHeap(arr, index, heapSize){

? ?   var tem = index; //記錄入?yún)⒃叵聵?biāo)

? ?   var leftChildIndex = 2 *index + 1; //元素的左子樹的元素下標(biāo)

? ?   var rightChildeIndex = 2 * index + 2;//元素的右子樹的元素下標(biāo)

? ?   if( leftChildIndex < heapSize && arr[leftChildIndex] > arr[index]){

? ?     index = leftChildIndex;

? ?   }

? ?   if( rightChildeIndex < heapSize && arr[rightChildeIndex] > arr[index]){

? ?     index = rightChildeIndex;

? ?   }

? ?   if(index != tem){

? ?     var t = arr[tem];

? ?     arr[tem] = arr[index];

? ?     arr[index] = t;

? ?     this.maxHeap(arr, index, heapSize);

? ?   }

? ? }

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 堆的預(yù)備知識 堆是一個完全二叉樹。 完全二叉樹: 二叉樹除開最后一層,其他層結(jié)點數(shù)都達(dá)到最大,最后一層的所有結(jié)點都...
    Leondt閱讀 2,160評論 2 5
  • 排序算法說明 (1)排序的定義:對一序列對象根據(jù)某個關(guān)鍵字進(jìn)行排序; 輸入:n個數(shù):a1,a2,a3,…,an 輸...
    code武閱讀 750評論 0 0
  • 原理 堆排序原理 實現(xiàn) 說明 堆排序?qū)Υ笪募苡行?堆排序是不穩(wěn)定排序
    shirleyyu001閱讀 460評論 0 0
  • /*去重*/ function delRepeat(arr){ var newArray=new Array();...
    Hedgehog_Dove閱讀 2,001評論 0 2
  • 桂璽,你好! 你知道爸爸出生在章丘南部山區(qū)一個不是很富裕的家庭里,你可能只知道一部分,在你知道爸爸老家在哪里...
    柳松林閱讀 939評論 0 0

友情鏈接更多精彩內(nèi)容