算法堆排序heap sort-大頂堆例子_第1頁
算法堆排序heap sort-大頂堆例子_第2頁
算法堆排序heap sort-大頂堆例子_第3頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、登錄xiaoxiaoxuewen:8篇:55篇譯文:0篇堆排序原理及算法實現(xiàn)(最大堆)2012-05-15 22:24 9053人閱讀 評論(0) 收藏堆排序堆排序是利用堆的性質(zhì)進(jìn)行的一種選擇排序。下面先1.堆堆實際上是一棵完全二叉樹,其任何一非葉節(jié)點滿足性質(zhì):一下堆。Keyi=key2i+1&Keyi=Key2i+1&key=key2i+2即任何一非葉節(jié)點的關(guān)鍵字大于或者小于其左右孩子節(jié)點的關(guān)鍵字。堆分為大頂堆和小頂堆,滿足Keyi=Key2i+1&key=key2i+2稱為大頂堆,滿足 Keyi=key2i+1&Keyi=key2i+2稱為小頂堆。由上述性質(zhì)可知大頂堆的堆頂?shù)年P(guān)鍵字肯定是所

2、有關(guān)鍵字中最大的,小頂堆的堆頂?shù)年P(guān)鍵字是所有關(guān)鍵字中最小的。2.堆排序的利用大頂堆(小頂堆)堆頂?shù)氖亲畲箨P(guān)鍵字(最小關(guān)鍵字)這一特性,使得每次從無序中選擇最大(最小)變得簡單。其基本為(大頂堆):將初始待排序關(guān)鍵字序列(R1,R2.Rn)構(gòu)建成大頂堆,此堆為初始的無須區(qū);將堆頂元素R1與最后一個元素Rn交換,此時得到新的無序區(qū)(R1,R2,.Rn-1)和新的有序區(qū)(Rn),且滿足R1,2. n-1=Rn;3)由于交換后新的堆頂R1可能堆的性質(zhì),因此需要對當(dāng)前無序區(qū)(R1,R2,.Rn-1)調(diào)整為新堆,然后再次將R1與無序區(qū)最后一個元素交換,得到新的無序區(qū)(R1,R2.Rn-2)和新的有序區(qū)(R

3、n-1,Rn)。斷重復(fù)此過程直到有序區(qū)的元素個數(shù)為n-1,則整個排序過程完成。操作過程如下:1)初始化堆:將R1.n構(gòu)造為堆;2)將當(dāng)前無序區(qū)的堆頂元素R1同該區(qū)間的最后一個交換,然后將新的無序區(qū)調(diào)整為新的堆。因此對于堆排序,最重要的兩個操作就是構(gòu)造初始堆和調(diào)整堆,其實構(gòu)造初始堆事實上也是調(diào)整堆的過程,只過構(gòu)造初始堆是對所有的非葉節(jié)點都進(jìn)行調(diào)整。下面舉例說明:給定一個整形數(shù)組a=16,7,3,20,17,8,對其進(jìn)行堆排序。首先根據(jù)該數(shù)組元素構(gòu)建一個完全二叉樹,得到然后需要構(gòu)造初始堆,則從最后一個非葉節(jié)點開始調(diào)整,調(diào)整過程如下:20和16交換后導(dǎo)致16滿足堆的性質(zhì),因此需重新調(diào)整這樣就得到初始

4、堆。即每次調(diào)整都是從父節(jié)點、左孩子節(jié)點、右孩子節(jié)點三者中選擇最大者跟父節(jié)點進(jìn)行交換(交換之后可能造成被交換的孩子節(jié)點滿足堆的性質(zhì),因此每次交換之后要重新對被交換的孩子節(jié)點進(jìn)行調(diào)整)。有初始堆之后就可以進(jìn)行排序。此時3位于堆頂滿堆的性質(zhì),則需調(diào)整繼續(xù)調(diào)整這樣整個區(qū)間便已經(jīng)有序。從上述過程可知,堆排序其實也是一種選擇排序,是一種樹形選擇排序。只過直接選擇排序中,為從R1.n中選擇最大2次比較中有很多已經(jīng),需比較n-1次,然后從R1.n-2中選擇最大需比較n-2次。事實上這n-面的n-1次比較中已經(jīng)做過,而樹形選擇排序恰好利用樹形的特點保存部分前面的比較結(jié)果,因此可以減少比較次數(shù)。對于n個關(guān)鍵字序列

5、,情況下每個節(jié)點需比較log2(n)次,因此其情況下時間復(fù)雜度為nlogn。堆排序為穩(wěn)定排序,適合較少的排序。測試程序/* 堆排序(大頂堆)201.9.14*/#include #includeusingnamesp d;調(diào)整堆voidHeapAdjus *alchild=2*i; rchild=2*i+1;i size) /的左孩子節(jié)點序號的右孩子節(jié)點序號/i/i臨時變?nèi)绻鹖是葉節(jié)點就用進(jìn)行調(diào)整ax=i; if(i=size/2)/if(lchildamax)max=lchild;if(rchildamax)max=rchild;if(max!=i)swap(ai,amax); HeapAdjust(a,max,size); /避免調(diào)整之后以max為父節(jié)點的是堆建立堆voidBuildHeap;aize)/非葉節(jié)點最大序號值為size/2for(i=size/2;i=1;i-) /HeapAdjust(a,i,size);堆排序voidHeapSort;BuildHa ize)/e);for(i=size;i=1;i-)/couta10)i; for(i=1;iai; HeapSort(a,size); for(i=1;i=size;i+)coutai; coutendl;return0;查看評論暫無評論* 以上用戶

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論