韩国美女高清爽快一级毛片-韩国美女毛片-韩国美女人成网站在线看看-韩国美女丝袜一区二区-韩国美女一级毛片-韩国美女一级片

24小時聯系電話:18217114652、13661815404

中文

您當前的位置:
首頁>
電子資訊>
技術專題>
二進制堆排序算法說明

技術專題

二進制堆排序算法說明


二進制堆排序算法說明

二進制堆排序算法使用二進制樹執行排序操作。二叉樹是由數組中的元素構建而成的結構,如下圖所示以樹的形式顯示。二進制堆樹有兩種類型,max-heapmin-heap

同樣值得注意的是,還有其他排序算法,例如Bubble排序,Selection排序,Insertion排序和Merge排序來對給定數組中的元素進行排序。

當涉及二進制堆排序算法時,它有兩種類型。

最大堆二叉樹,其父節點大于或等于其每個子節點。上面顯示的堆樹是最大堆樹的示例。

最小堆二叉樹,其中所有父節點均小于或等于其每個子節點。

堆排序通過刪除節點中最大或最小的元素并將其放入數組中來執行排序。每次提取之后,將更新堆以維護堆屬性。為了更好地解釋這一點,請看以下示例

二進制堆排序算法說明:

考慮以下具有五個數字的數組。我們需要使用Max-heap以升序對它進行排序。

讓我們根據給定的數字數組構造一個完整的二叉樹。通過以這種方式排列數組中的元素來構造樹,使其形成具有父節點和子節點的樹狀數據結構。

該樹必須是完整的二叉樹才能成為堆數據結構。有兩種類型的節點,父節點和子節點。子節點是附加到單個節點(即其父節點)的節點。在下面的二叉樹中,15是父節點,743是其子節點。同樣,在下一級的二叉樹7中,父節點– 255是子節點。

我們需要將父節點與子節點(7255)進行比較。

其中最大的25個。

7會被25交換,因為它大于7

將節點2543與它的父節點43進行比較。

15在父節點中將被替換為43,因為相比而言,它在其他兩個節點中最大。

因此,我們得到了我們的最大堆

現在我們需要構造排序后的數組。為此,涉及三個步驟。

交換

去掉

堆肥

首先將根節點與最后一個節點交換。因為我們知道這是最大堆,所以根節點在所有節點中最大,而5在最小節點中。

刪除數字43

通過將最大值放在根節點或堆中來重建堆

7交換25

移除25

通過將15放在頂部來進行堆肥

7交換15

移除15

5交換7

刪除7

然后我們得到排序的數組

然后我們得到排序的數組

實現二進制堆排序算法的步驟:

從輸入元素創建二叉樹

您需要根據需要執行的排序類型將其設置為最大堆或最小堆。

比較父節點和子節點

用最大的子節點替換父節點

對所有父節點執行相同的操作

重復直到對二叉樹中的所有節點進行排序并獲得最大堆

然后將根節點與最后一個節點交換

刪除該節點,因為這是最大值,并根據排序順序將其放入數組的最右側或數組的最左側

通過將最大值放到根節點或heapify來重建堆

將根節點與最右邊的子節點進行比較

重復相同的過程,直到所有節點都被整理到陣列中

二進制堆排序算法的示例代碼:

#include <stdio.h>

 //交換兩個元素位置的函數

 void swapint * aint * b{

   int temp = * a;

   * a = * b;

   * b =溫度;

 }

 void heapifyint arr []int nint i{

   //在根,左子和右子中找到最大的

   int最大= i;

   左整數= 2 * i + 1;

   正確的整數= 2 * i + 2;

   如果(左<n && arr [left]> arr [largest]

     最大=左;

   如果(正確<n && arr [正確]> arr [最大]

     最大=正確;

   //如果根不是最大,交換并繼續堆

   如果(最大!= i{

     swap(&arr [i],&arr [large];

     heapifyarrn,最大);

   }

 }

 //主函數做堆排序

 void heapSortint arr []int n{

   //建立最大堆

   對于(int i = n / 2-1; i> = 0; i--

     heapifyarrni;

   //堆排序

   對于(int i = n-1; i> = 0; i--{

     swap(&arr [0],&arr [i];

     //重整根元素以再次在根上獲得最高元素

     heapifyarri0;

   }

 }

 //打印數組

 void printArrayint arr []int n{

   對于(int i = 0; i <n; ++ i

     printfd”arr [i];

   printf“ \ n”;

 }

 //主要代碼

 int main(){

   int arr [] = {15743255};

   int n = sizeofarr/ sizeofarr [0];

   heapSortarrn;

   printf排序數組為\ n”;

   printArrayarrn;

 }

請輸入搜索關鍵字

確定
主站蜘蛛池模板: 奇米影视久久777中文字幕 | 福利视频999 | 一极毛片 | 国产日韩在线看 | 久久99亚洲精品久久久久99 | 国产一区二区网站 | 日本黄色aa | 国内精品在线视频 | 中文字幕一二区 | 国产精品永久免费视频观看 | 国产第一福利 | 欧美一级毛片在线看视频 | 2021国产精品自产拍在线观看 | 欧美综合久久 | 天天久久狠狠伊人第一麻豆 | 99在线观看视频免费精品9 | 狠狠干影视 | 女人18一级毛片免费观看 | 欧美亚洲国产激情一区二区 | 欧美日一级片 | 青青青爽视频在线观看 | 国产成人免费a在线视频色戒 | 日韩久久精品一区二区三区 | 一级毛片免费视频 | 国产亚洲玖玖玖在线观看 | 免费精品国产自产拍在 | 国产香蕉91tv永久在线 | 在线观看国产精美视频 | 四虎国产精品免费视 | 国产成人亚洲精品91专区手机 | 亚洲夜夜操 | a毛片全部免费播放 | 日本色吧 | 成人毛片免费在线观看 | 9久久免费国产精品特黄 | 在线观看黄色免费视频 | 亚洲 欧美 卡通 在线 另类 | 天天干天天上 | 亚洲欧美色综合一区二区在线 | 亚洲成片观看四虎永久 | 国产高清视频 |