,堆排序" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Java排序算法 堆排序

系統(tǒng) 2378 0

1991年計(jì)算機(jī)先驅(qū)獎(jiǎng)獲得者、斯坦福大學(xué)計(jì)算機(jī)科學(xué)系教授羅伯特·弗洛伊德(Robert W.Floyd)和威廉姆斯(J.Williams)在1964年共同發(fā)明了著名的堆排序算法( Heap Sort )。本文主要介紹堆排序用Java來(lái)實(shí)現(xiàn)。

AD:


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

堆排序利用了大根堆(或小根堆)堆頂記錄的關(guān)鍵字最大(或最小)這一特征,使得在當(dāng)前無(wú)序區(qū)中選取最大(或最小)關(guān)鍵字的記錄變得簡(jiǎn)單。

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

① 先將初始文件R[1..n]建成一個(gè)大根堆,此堆為初始的無(wú)序區(qū)

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

③由于交換后新的根R[1]可能違反堆性質(zhì),故應(yīng)將當(dāng)前無(wú)序區(qū)R[1..n-1]調(diào)整為堆。然后再次將R[1..n-1]中關(guān)鍵字最大的記錄R[1]和該區(qū)間的最后一個(gè)記錄R[n-1]交換,由此得到新的無(wú)序區(qū)R[1..n-2]和有序區(qū)R[n-1..n],且仍滿(mǎn)足關(guān)系R[1..n-2].keys≤R[n-1..n].keys,同樣要將R[1..n-2]調(diào)整為堆。

……

直到無(wú)序區(qū)只有一個(gè)元素為止。

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

① 初始化操作:將R[1..n]構(gòu)造為初始堆;

② 每一趟排序的基本操作:將當(dāng)前無(wú)序區(qū)的堆頂記錄R[1]和該區(qū)間的最后一個(gè)記錄交換,然后將新的無(wú)序區(qū)調(diào)整為堆(亦稱(chēng)重建堆)。

注意:<wbr></wbr>

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

②用小根堆排序與利用大根堆類(lèi)似,只不過(guò)其排序結(jié)果是遞減有序的。堆排序和直接選擇排序相反:在任何時(shí)刻堆排序中無(wú)序區(qū)總是在有序區(qū)之前,且有序區(qū)是在原向量的尾部由后往前逐步擴(kuò)大至整個(gè)向量為止。

代碼實(shí)現(xiàn):

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排序算法?堆排序


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 香蕉碰碰人人a久久动漫精品 | 一级肉体毛片视频免费看看 | 日本亚洲精品成人 | 日本黄黄| 91亚洲国产三上悠亚在线 | 777奇米视频 | 久久成人亚洲香蕉草草 | 色婷婷色99国产综合精品 | 欧美精品中文 | 国产成人免费全部网站 | 久久精品国产色蜜蜜麻豆 | 一级aaa级毛片午夜在线播放 | 亚洲精品在线视频观看 | 欧美一级毛片特黄黄 | 91亚洲免费 | 久久综合久久美利坚合众国 | 爱我久久视频免费观看影视 | 在线成人免费观看国产精品 | 成人小视频在线观看免费 | 俄罗斯一级毛片免费视频 | 青草网址| 中文字幕中韩乱码亚洲大片 | 久操视频网 | 福利网站在线播放 | 亚洲日本高清影院毛片 | 亚洲综合色在线 | 欧美一级特黄特黄毛片 | 四虎网站在线观看 | 日韩一级黄色大片 | 97精品国产综合久久 | 性欧美视频在线观看 | 国产成人久久精品二区三区 | 久草最新视频 | 久草久草视频 | 日日夜夜操操 | 伊人久久影视 | 新久草视频 | 久久精品人人做人人看最新章 | 亚洲毛片在线观看 | 国产成人午夜片在线观看 | 欧美另类交视频 |