堆排序之java

2021-07-25 16:07:46 字數 621 閱讀 4714

堆排序原理:將待排序的陣列構造成乙個大頂錐,整個陣列的最大值就是堆頂的根節點。將她移走(其實就是將其與堆陣列的末尾元素交換,此時末尾元素就是最大值),然後將剩餘的n-1個元素重新構造成乙個堆,這樣就會得到n個元素中的次大值,如此反覆,便能得到有序陣列了。

//第乙個for迴圈是將待排序陣列構建成乙個大頂錐

//第二個for迴圈是將每個最大值的根節點(就是第乙個元素)與末尾元素交換,然後再調整其成為大頂錐

//陣列第乙個元素不是要比較的元素,但可以是陣列的元素數。

public

static

voidheapsort(intarr)

}//將每個非葉子節點當做根節點,把其和其子樹調整成大頂錐

// h是對應的小頂點,m是對應的最後乙個元素。

private

static

voidheapadjust(intarr,inth,intm)

arr[h]=temp;

}

堆排序之java實現

堆排序就是利用堆 假設利用大頂堆 進行排序的方法。它的基本思想是,將待排序的序列構造成乙個大頂堆。此時,整個序列的最大值就是堆頂的根節點。將它移走 其實就是將其與堆陣列的末尾元素交換,此時末尾元素就是最大值 然後將剩餘的 n 1 個序列重新構造成乙個堆,這樣就會得到 n 個元素中次大的值。如此反覆執...

排序演算法之堆排序java實現

堆排序 heap sort 的基本思想是迴圈執行如下過程直到陣列為 空 什麼是最大堆?堆是乙個具有這樣性質的順序二叉樹,每個非葉子節點的關鍵字大於等於它的孩子結點的關鍵字。顯然在乙個堆中,根節點具有最大值,而且堆中任何乙個結點的非空左 右子樹都是乙個堆,它的根節點到任一葉子的每條路徑上的節點都是遞減...

Java實現 高效排序演算法之堆排序

堆排序只需要乙個記錄大小的輔助空間,每個待排序的記錄僅占有乙個儲存空間。在處理堆排序時面臨兩個問題 乙個是如何建堆。另乙個是如何在輸出堆頂後進行調整,成為乙個新堆。建堆的過程主要是通過在n 2 取下限 處開始,反覆進行 篩選 的過程。具體過程見演算法分析及注釋。堆排序的偽 heapsort data...