婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Python實現堆排序案例詳解

Python實現堆排序案例詳解

熱門標簽:徐州天音防封電銷卡 佛山防封外呼系統收費 不錯的400電話辦理 南昌辦理400電話怎么安裝 湛江電銷防封卡 電話機器人適用業務 鄭州智能外呼系統運營商 獲客智能電銷機器人 哈爾濱外呼系統代理商

Python實現堆排序

一、堆排序簡介

堆排序(Heap Sort)是利用堆這種數據結構所設計的一種排序算法。

堆的結構是一棵完全二叉樹的結構,并且滿足堆積的性質:每個節點(葉節點除外)的值都大于等于(或都小于等于)它的子節點。

關于二叉樹和完全二叉樹的介紹可以參考:https://www.jb51.net/article/222487.htm

堆排序先按從上到下、從左到右的順序將待排序列表中的元素構造成一棵完全二叉樹,然后對完全二叉樹進行調整,使其滿足堆積的性質:每個節點(葉節點除外)的值都大于等于(或都小于等于)它的子節點。構建出堆后,將堆頂與堆尾進行交換,然后將堆尾從堆中取出來,取出來的數據就是最大(或最小)的數據。重復構建堆并將堆頂和堆尾進行交換,取出堆尾的數據,直到堆中的數據全部被取出,列表排序完成。

堆結構分為大頂堆和小頂堆:

1. 大頂堆:每個節點(葉節點除外)的值都大于等于其子節點的值,根節點的值是所有節點中最大的,所以叫大頂堆,在堆排序算法中用于升序排列。

2. 小頂堆:每個節點(葉節點除外)的值都小于等于其子節點的值,根節點的值是所有節點中最小的,所以叫小頂堆,在堆排序算法中用于降序排列。

二、堆排序原理

堆排序的原理如下:

1. 將待排序列表中的數據按從上到下、從左到右的順序構造成一棵完全二叉樹。

2. 將完全二叉樹中每個節點(葉節點除外)的值與其子節點(子節點有一個或兩個)中較大的值進行比較,如果節點的值小于子節點的值,則交換他們的位置(大頂堆,小頂堆反之)。

3. 將節點與子節點進行交換后,要繼續比較子節點與孫節點的值,直到不需要交換或子節點是葉節點時停止。比較完所有的非葉節點后,即可構建出堆結構。

4. 將數據構造成堆結構后,將堆頂與堆尾交換,然后將堆尾從堆中取出來,添加到已排序序列中,完成一輪堆排序,堆中的數據個數減1。

5. 重復步驟2,3,4,直到堆中的數據全部被取出,列表排序完成。

以列表 [10, 17, 50, 7, 30, 24, 27, 45, 15, 5, 36, 21] 進行升序排列為例。列表的初始狀態如下圖。

要進行升序排序,則構造堆結構時,使用大頂堆。

1. 將待排序列表中的數據按從上到下、從左到右的順序構造成一棵完全二叉樹。

2. 從完全二叉樹的最后一個非葉節點開始,將它的值與其子節點中較大的值進行比較,如果值小于子節點則交換。24是最后一個非葉子節點,它只有一個子節點21,24大于21,不需要交換。

3. 繼續將倒數第二個非葉節點的值與其子節點中較大的值進行比較,如果值小于子節點則交換。節點30有兩個子節點5和36,較大的是36,30小于36,交換位置。

4. 重復對下一個節點進行比較。7小于45,交換位置。

5. 繼續重復,50大于27,不需要交換位置。如果不需要進行交換,則不用再比較子節點與孫節點。

6. 繼續重復,17小于45,交換位置。

7. 17和45交換位置之后,17交換到了子節點的位置,還需要繼續將其與孫節點進行比較。17大于15,不需要交換。

8. 繼續對下一個節點進行比較,10小于50,交換位置。

9. 10和50交換位置之后,10交換到了子節點的位置,還需要繼續將其與孫節點進行比較。10小于于27,交換位置。

10. 此時,一個大頂堆構造完成,滿足了堆積的性質:每個節點(葉節點除外)的值都大于等于它的子節點。

11. 大頂堆構建完成后,將堆頂與堆尾交換位置,然后將堆尾從堆中取出。將50和21交換位置,交換后21到了堆頂,50(最大的數據)到了堆尾,然后將50從堆中取出。

12. 將50從堆中取出后,找到了待排序列表中的最大值,50添加到已排序序列中,第一輪堆排序完成,堆中的元素個數減1。

13. 取出最大數據后,重復將完全二叉樹構建成大頂堆,交換堆頂和堆尾,取出堆尾。這樣每次都是取出當前堆中最大的數據,添加到已排序序列中,直到堆中的數據全部被取出。

14. 循環進行 n 輪堆排序之后,列表排序完成。排序結果如下圖。

三、Python實現堆排序

# coding=utf-8
def heap_sort(array):
    first = len(array) // 2 - 1
    for start in range(first, -1, -1):
        # 從下到上,從右到左對每個非葉節點進行調整,循環構建成大頂堆
        big_heap(array, start, len(array) - 1)
    for end in range(len(array) - 1, 0, -1):
        # 交換堆頂和堆尾的數據
        array[0], array[end] = array[end], array[0]
        # 重新調整完全二叉樹,構造成大頂堆
        big_heap(array, 0, end - 1)
    return array
 
 
def big_heap(array, start, end):
    root = start
    # 左孩子的索引
    child = root * 2 + 1
    while child = end:
        # 節點有右子節點,并且右子節點的值大于左子節點,則將child變為右子節點的索引
        if child + 1 = end and array[child]  array[child + 1]:
            child += 1
        if array[root]  array[child]:
            # 交換節點與子節點中較大者的值
            array[root], array[child] = array[child], array[root]
            # 交換值后,如果存在孫節點,則將root設置為子節點,繼續與孫節點進行比較
            root = child
            child = root * 2 + 1
        else:
            break
 
 
if __name__ == '__main__':
    array = [10, 17, 50, 7, 30, 24, 27, 45, 15, 5, 36, 21]
    print(heap_sort(array))

運行結果:

[5, 7, 10, 15, 17, 21, 24, 27, 30, 36, 45, 50]

代碼中,先實現一個big_heap(array, start, end)函數,用于比較節點與其子節點中的較大者,如果值小于子節點的值則進行交換。代碼中不需要真正將數據都添加到完全二叉樹中,而是根據待排序列表中的數據索引來得到節點與子節點的位置關系。完全二叉樹中,節點的索引為i,則它的左子節點的索引為2*i+1,右子節點的索引為2*i+2,有n個節點的完全二叉樹中,非葉子節點有n//2個,列表的索引從0開始,所以索引為0~n//2-1的數據為非葉子節點。

實現堆排序函數heap_sort(array)時,先調用big_heap(array, start, end)函數循環對非葉子節點進行調整,構造大頂堆,然后將堆頂和堆尾交換,將堆尾從堆中取出,添加到已排序序列中,完成一輪堆排序。然后循環構建大頂堆,每次將最大的元素取出,直到堆中的數據全部被取出。

四、堆排序的時間復雜度和穩定性

1. 時間復雜度

在堆排序中,構建一次大頂堆可以取出一個元素,完成一輪堆排序,一共需要進行n輪堆排序。每次構建大頂堆時,需要進行的比較和交換次數平均為logn(第一輪構建堆時步驟多,后面重建堆時步驟會少很多)。時間復雜度為 T(n)=nlogn ,再乘每次操作的步驟數(常數,不影響大O記法),所以堆排序的時間復雜度為 O(nlogn) 。

2. 穩定性

在堆排序中,會交換節點與子節點,如果有相等的數據,可能會改變相等數據的相對次序。所以堆排序是一種不穩定的排序算法。

到此這篇關于Python實現堆排序案例詳解的文章就介紹到這了,更多相關Python實現堆排序內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 如何利用Python動態展示排序算法
  • Python 列表排序詳解
  • python編程冒泡排序法實現動圖排序示例解析
  • python教程對函數中的參數進行排序
  • python數據結構的排序算法
  • python如何實現常用的五種排序算法詳解
  • Python 數據結構之十大經典排序算法一文通關

標簽:吉安 廣西 安康 呂梁 懷化 紹興 蘭州 蕪湖

巨人網絡通訊聲明:本文標題《Python實現堆排序案例詳解》,本文關鍵詞  Python,實現,堆,排序,案例,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python實現堆排序案例詳解》相關的同類信息!
  • 本頁收集關于Python實現堆排序案例詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲国产精华液网站w| 中文字幕久久午夜不卡| 91精品国产一区二区三区蜜臀| 91黄色免费网站| 欧美日韩精品一区二区在线播放| 日韩一区二区精品| 中文字幕在线不卡视频| 日本系列欧美系列| 92精品国产成人观看免费| 国产盗摄女厕一区二区三区| 色噜噜狠狠成人中文综合| 久久久亚洲精品石原莉奈| 日韩一区欧美二区| 欧美色图在线观看| 中文字幕欧美激情| 国产精品亚洲午夜一区二区三区| 日韩一区二区三| 天堂一区二区在线免费观看| 97se亚洲国产综合在线| 国产精品不卡在线观看| 成人一级片网址| 久久精品夜夜夜夜久久| 日韩专区欧美专区| 欧美在线不卡一区| 亚洲精品乱码久久久久久黑人 | 久久av资源站| 欧美精品一级二级三级| 调教+趴+乳夹+国产+精品| 国产成人精品在线看| 久久色成人在线| 国产一区欧美日韩| 久久一二三国产| 国产精品一区一区| 中文字幕亚洲综合久久菠萝蜜| 欧美日韩精品三区| 亚洲一区在线视频| 91在线国产福利| 日韩二区三区在线观看| 久久一日本道色综合| 色婷婷国产精品综合在线观看| 五月激情六月综合| 国产精品久久久久三级| 欧美日韩国产123区| 国产精品久久国产精麻豆99网站| 91福利区一区二区三区| 高清国产一区二区| 亚洲视频一区二区免费在线观看| 日韩欧美亚洲另类制服综合在线| 中文字幕一区不卡| 欧美丰满美乳xxx高潮www| 国产精品一区二区在线观看不卡 | 欧美大片拔萝卜| 美女性感视频久久| 中文字幕第一区第二区| 精品国产3级a| 色中色一区二区| 91亚洲精品乱码久久久久久蜜桃 | 在线综合视频播放| 色成年激情久久综合| 美女尤物国产一区| 日韩国产欧美三级| 亚洲国产精品高清| 国产日韩精品久久久| 欧美日韩美少妇| 国产午夜精品一区二区三区四区| 91视频www| 亚洲综合视频网| 亚洲视频免费观看| 日韩欧美一级在线播放| 欧美一区二区三区四区五区| 不卡av在线免费观看| 国产成人激情av| 日本aⅴ亚洲精品中文乱码| 日韩精品欧美精品| 亚洲欧洲日本在线| 自拍视频在线观看一区二区| 久久综合久久99| 亚洲国产精品国自产拍av| 日韩欧美高清一区| 国产日韩欧美a| 欧美在线影院一区二区| 亚洲成精国产精品女| 亚洲一级电影视频| 亚洲欧洲日产国产综合网| ...中文天堂在线一区| 3751色影院一区二区三区| 一区二区高清视频在线观看| 亚洲色图在线播放| 欧美日韩一区国产| 欧美老肥妇做.爰bbww| 不卡av免费在线观看| 91福利国产成人精品照片| av在线不卡网| 欧美三级韩国三级日本一级| 91污在线观看| 97国产一区二区| 97aⅴ精品视频一二三区| 色久优优欧美色久优优| 久久久久久夜精品精品免费| 欧美另类videos死尸| 石原莉奈在线亚洲二区| 亚洲一区二区三区影院| 欧美放荡的少妇| 国产日本欧美一区二区| 欧美亚洲一区三区| 久久综合色一综合色88| 久久精品亚洲国产奇米99| 亚洲免费在线电影| 夜夜嗨av一区二区三区中文字幕| 久久99精品国产.久久久久| 麻豆视频观看网址久久| 99精品国产91久久久久久 | 亚洲人成在线播放网站岛国| 日本午夜一区二区| 国产成人免费9x9x人网站视频| 欧美日韩日本视频| 精品噜噜噜噜久久久久久久久试看 | 91在线观看下载| 国产在线视频精品一区| 欧美午夜电影在线播放| 欧美日韩不卡在线| 91麻豆精品91久久久久同性| 亚洲欧美中日韩| 亚洲电影在线播放| 91丨九色丨黑人外教| 欧美高清dvd| 亚洲视频在线一区观看| 亚洲综合色区另类av| 国产99精品在线观看| 色婷婷国产精品久久包臀| 2024国产精品| 亚洲午夜久久久久久久久电影院 | 欧美高清视频在线高清观看mv色露露十八| 一本色道久久综合亚洲91 | 一区二区三区四区在线| 高清视频一区二区| 一本色道亚洲精品aⅴ| 国产精品视频在线看| 亚洲激情欧美激情| 在线观看网站黄不卡| 国产乱码精品一区二区三| 欧美高清视频www夜色资源网| 亚洲在线中文字幕| 成人免费观看av| 欧美四级电影网| 春色校园综合激情亚洲| 国产白丝精品91爽爽久久| 26uuu久久天堂性欧美| 国产日韩高清在线| 粉嫩av一区二区三区粉嫩| 粉嫩蜜臀av国产精品网站| 久久久精品黄色| 另类调教123区 | 欧美午夜精品免费| 天天色 色综合| 91成人免费在线视频| 亚洲狠狠爱一区二区三区| 波多野结衣91| 亚洲成人激情自拍| 欧美亚洲综合在线| 免费看黄色91| 日韩免费一区二区三区在线播放| 激情偷乱视频一区二区三区| 欧美放荡的少妇| 午夜精品福利一区二区蜜股av| 一本到高清视频免费精品| 欧美一区二区性放荡片| 日韩精品一二区| 欧美综合亚洲图片综合区| 日韩精品成人一区二区在线| 色av综合在线| 男女男精品网站| 精品国产一区二区国模嫣然| 成人免费视频app| 国产精品国产三级国产a| 欧美性videosxxxxx| 久久久影视传媒| 91高清视频在线| 久久精品人人爽人人爽| 日本电影亚洲天堂一区| 精品一区二区三区免费毛片爱 | 欧美三级欧美一级| 久久美女艺术照精彩视频福利播放| 精品一区二区av| 一区二区三区高清不卡| 欧美日韩在线综合| 不卡欧美aaaaa| 亚洲欧美激情小说另类| 久久理论电影网| 色94色欧美sute亚洲线路二| 国产在线视视频有精品| 亚洲日本欧美天堂| 精品国产免费人成电影在线观看四季| 性做久久久久久久免费看| 国产精品久久久久婷婷| a4yy欧美一区二区三区| 国产剧情一区二区三区| 欧美激情一区二区三区四区| 26uuu精品一区二区在线观看| 欧美一区二区福利在线|