,堆排序" />

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Java排序算法 堆排序

系統 2021 0

1991年計算機先驅獎獲得者、斯坦福大學計算機科學系教授羅伯特·弗洛伊德(Robert W.Floyd)和威廉姆斯(J.Williams)在1964年共同發明了著名的堆排序算法( Heap Sort )。本文主要介紹堆排序用Java來實現。

AD:


堆積排序 (Heapsort)是指利用堆積樹(堆)這種資料結構所設計的一種排序算法,可以利用數組的特點快速定位指定索引的元素。堆排序是不穩定的排序方法,輔助空間為O(1), 最壞時間復雜度為O(nlog2n)<wbr>,堆排序的堆序的平均性能較接近于最壞性能。<wbr></wbr></wbr>

堆排序利用了大根堆(或小根堆)堆頂記錄的關鍵字最大(或最小)這一特征,使得在當前無序區中選取最大(或最小)關鍵字的記錄變得簡單。

(1)用大根堆排序的基本思想

① 先將初始文件R[1..n]建成一個大根堆,此堆為初始的無序區

② 再將關鍵字最大的記錄R[1](即堆頂)和無序區的最后一個記錄R[n]交換,由此得到新的無序區R[1..n-1]和有序區R[n],且滿足R[1..n-1].keys≤R[n].key

③由于交換后新的根R[1]可能違反堆性質,故應將當前無序區R[1..n-1]調整為堆。然后再次將R[1..n-1]中關鍵字最大的記錄R[1]和該區間的最后一個記錄R[n-1]交換,由此得到新的無序區R[1..n-2]和有序區R[n-1..n],且仍滿足關系R[1..n-2].keys≤R[n-1..n].keys,同樣要將R[1..n-2]調整為堆。

……

直到無序區只有一個元素為止。

(2)大根堆排序算法的基本操作: <wbr></wbr>

① 初始化操作:將R[1..n]構造為初始堆;

② 每一趟排序的基本操作:將當前無序區的堆頂記錄R[1]和該區間的最后一個記錄交換,然后將新的無序區調整為堆(亦稱重建堆)。

注意:<wbr></wbr>

①只需做n-1趟排序,選出較大的n-1個關鍵字即可以使得文件遞增有序。

②用小根堆排序與利用大根堆類似,只不過其排序結果是遞減有序的。堆排序和直接選擇排序相反:在任何時刻堆排序中無序區總是在有序區之前,且有序區是在原向量的尾部由后往前逐步擴大至整個向量為止。

代碼實現:

public class HeapSort<wbr> { <wbr><br><wbr><wbr><wbr> public static void main(String[] args) <wbr><br><wbr><wbr><wbr> { <wbr><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> int[] a = {26, 5, 77, 1, 61, 11, 59, 15, 48, 19}; <wbr><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> Sort(a); <wbr><br><wbr><wbr><wbr> } <wbr><br><wbr><wbr><wbr> ////小堆排序<br><wbr><wbr><wbr> public static void Sort(int[] a) <wbr><br><wbr><wbr><wbr> { <wbr><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> int n = a.length; <wbr><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> int temp = 0; <wbr><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> Display(a, "Before sort : "); <wbr><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> for(int i=n/2; i&gt;0; i--) <wbr><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> Adjust(a, i-1, n); <wbr><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><br><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> for(int i=n-2; i&gt;=0; i--) <wbr><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> { <wbr><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> temp = a[i+1]; <wbr><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> a[i+1] = a[0]; <wbr><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> a[0] = temp; <wbr><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> Adjust(a, 0, i+1); <wbr><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> } <wbr><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> Display(a, "After<wbr> sort : "); <wbr><br><wbr><wbr><wbr> } <wbr><br><wbr><wbr><wbr><wbr><wbr><br><wbr><wbr><wbr> public<wbr> static void Adjust(int[] a, int i, int n) <wbr><br><wbr><wbr><wbr> { <wbr><br><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

Java排序算法?堆排序


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 一级特黄欧美日韩免费视频 | 91视频精选| 99久久婷婷 | 最新欧美精品一区二区三区 | 欧美三级视频 | 有一婷婷色 | 一级大片久久 | 一区中文字幕 | 一区二区中文字幕 | 欧美福利视频在线观看 | 男女进进出出动态图啪啪 | 侮辱丰满美丽的人妻 | 亚洲色图150p| 波多久久夜色精品国产 | 亚洲精品久久午夜无码一区二区 | 欧美精品一区二区三区免费播放 | 毛片链接 | 香蕉国产在线观看免费 | 亚州久久 | 久久综合狠狠综合狠狠 | 夜夜操免费视频 | www伊人| 男人的天堂在线视频 | 国产免费一区 | 青青久操视频 | 日本看片一区二区三区高清 | 我不卡在线观看 | 波多野结衣一区二区三区在线观看 | 爱草在线 | 国产人成精品综合欧美成人 | aaa毛片手机在线现看 | 激情网站免费观看 | 国产成人精品三级 | 国产精品日本一区二区在线播放 | 99久久精品日本一区二区免费 | 国产老女人精品毛片久久 | 精品国产三级 | 国产一区二区三区久久久久久久久 | 嫩草影院在线免费观看 | 成人国产在线看 | 国产精品久久久久久久久久久新郎 |