最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python實(shí)現(xiàn)堆排序的實(shí)例講解

 更新時(shí)間:2020年02月21日 13:45:48   作者:阿凱  
在本篇文章里小編給大家分享的是一篇關(guān)于python實(shí)現(xiàn)堆排序的實(shí)例講解內(nèi)容,需要的朋友們可以學(xué)習(xí)參考下。

堆排序

堆是一種完全二叉樹(是除了最后一層,其它每一層都被完全填充,保持所有節(jié)點(diǎn)都向左對齊),首先需要知道概念:最大堆問題,最大堆就是根節(jié)點(diǎn)比子節(jié)點(diǎn)值都大,并且所有根節(jié)點(diǎn)都滿足,那么稱它為最大堆。反之最小堆。

當(dāng)已有最大堆,如下圖,首先將7提出,然后將堆中最后一個(gè)元素放到頂點(diǎn)上,此時(shí)這個(gè)堆不滿足最大堆了,那么我們要給它構(gòu)建成最大堆,需要找到此時(shí)堆中對打元素然后交換,此時(shí)最大值為6,符合最大堆后,我們將6提取出來,然后將堆中最后一個(gè)元素放到堆的頂部...以此類推。最后提取的數(shù)值7,6,5,4,3,2,1

那么在維護(hù)一個(gè)最大堆過程中,最多進(jìn)行交換次數(shù)決定了此算法復(fù)雜度,但交換次數(shù)與樹的高度有關(guān):

​ h=log2(n+1)h=log2(n+1)

最大堆生成:根據(jù)最大堆特性(任意一個(gè)根節(jié)點(diǎn)都大于葉子節(jié)點(diǎn))不滿足就調(diào)換。

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

from collections import deque


def swap_param(L, i, j):
 # 堆頂與最后元素交換
 L[i], L[j] = L[j], L[i]
 return L

def heap_adjust(L, start, end):
 #構(gòu)造成大根堆
 temp = L[start]
 i = start
 j = 2 * i
 while j <= end:
 # 判斷左右子節(jié)點(diǎn),取兩個(gè)子節(jié)點(diǎn)最大索引
 if (j < end) and (L[j] < L[j + 1]):
  j += 1
 # 判斷根節(jié)點(diǎn)與子節(jié)點(diǎn)比較,如果子節(jié)點(diǎn)大于根節(jié)點(diǎn),子節(jié)點(diǎn)賦值給根節(jié)點(diǎn)
 if temp < L[j]:
  L[i] = L[j]
  i = j
  j = 2 * i
 else:
  break
 # 再把 原來根節(jié)點(diǎn)值賦值給子節(jié)點(diǎn)上
 L[i] = temp

def heap_sort(L):
 L_length = len(L) - 1

 first_sort_count = L_length // 2
 for i in range(first_sort_count):
 heap_adjust(L, first_sort_count - i, L_length)

 for i in range(L_length - 1):
 L = swap_param(L, 1, L_length - i)
 heap_adjust(L, 1, L_length - i - 1)

 return [L[i] for i in range(1, len(L))]

def main():
 L = deque([50, 16, 30, 10, 60, 90, 2, 80, 70])
 L.appendleft(0)
 print(heap_sort(L))

main()

基礎(chǔ)知識點(diǎn)擴(kuò)展

堆排序

堆棧是計(jì)算機(jī)的兩種最基本的數(shù)據(jù)結(jié)構(gòu)。堆的特點(diǎn)就是FIFO(first in first out)先進(jìn)先出,這里的話我覺得可以理解成樹的結(jié)構(gòu)。堆在接收數(shù)據(jù)的時(shí)候先接收的數(shù)據(jù)會被先彈出。

堆排序節(jié)點(diǎn)訪問和操作定義

堆節(jié)點(diǎn)的訪問

在這里我們借用wiki的定義來說明:

通常堆是通過一維數(shù)組來實(shí)現(xiàn)的。在陣列起始位置為0的情況中

  • 父節(jié)點(diǎn)i的左子節(jié)點(diǎn)在位置(2*i+1);
  • 父節(jié)點(diǎn)i的右子節(jié)點(diǎn)在位置(2*i+2);
  • 子節(jié)點(diǎn)i的父節(jié)點(diǎn)在位置floor((i-1)/2);

到此這篇關(guān)于python實(shí)現(xiàn)堆排序的實(shí)例講解的文章就介紹到這了,更多相關(guān)堆排序python實(shí)現(xiàn)內(nèi)容請搜素腳本之家以前的文章或下面相關(guān)文章,希望大家以后多多支持腳本之家!

相關(guān)文章

  • selenium中g(shù)et_cookies()和add_cookie()的用法詳解

    selenium中g(shù)et_cookies()和add_cookie()的用法詳解

    這篇文章主要介紹了selenium中g(shù)et_cookies()和add_cookie()的用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 一篇文章帶你搞定Ubuntu中打開Pycharm總是卡頓崩潰

    一篇文章帶你搞定Ubuntu中打開Pycharm總是卡頓崩潰

    這篇文章主要介紹了一篇文章帶你搞定Ubuntu中打開Pycharm總是卡頓崩潰,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 基于Python實(shí)現(xiàn)繪制一個(gè)足球

    基于Python實(shí)現(xiàn)繪制一個(gè)足球

    這篇文章主要為大家詳細(xì)介紹了如何基于Python實(shí)現(xiàn)繪制一個(gè)簡單的足球,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的可以嘗試一下
    2023-02-02
  • python爬取分析超級大樂透歷史開獎數(shù)據(jù)

    python爬取分析超級大樂透歷史開獎數(shù)據(jù)

    這篇文章主要介紹了python爬取分析超級大樂透歷史開獎數(shù)據(jù),本次使用了requests和beautifulsoup庫進(jìn)行數(shù)據(jù)的爬取,通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • python Django框架實(shí)現(xiàn)web端分頁呈現(xiàn)數(shù)據(jù)

    python Django框架實(shí)現(xiàn)web端分頁呈現(xiàn)數(shù)據(jù)

    這篇文章主要介紹了python Django框架實(shí)現(xiàn)web端分頁呈現(xiàn)數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • 介紹一款python類型檢查工具pyright(推薦)

    介紹一款python類型檢查工具pyright(推薦)

    這篇文章主要介紹了介紹一款python類型檢查工具pyright(推薦),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python的re模塊正則表達(dá)式操作

    Python的re模塊正則表達(dá)式操作

    這篇文章主要介紹了Python的re模塊正則表達(dá)式操作 的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • python3實(shí)現(xiàn)域名查詢和whois查詢功能

    python3實(shí)現(xiàn)域名查詢和whois查詢功能

    本篇文章給大家分享了python3實(shí)現(xiàn)域名查詢和whois查詢功能的詳細(xì)代碼,有需要的朋友參考學(xué)習(xí)下。
    2018-06-06
  • python實(shí)現(xiàn)QQ定時(shí)發(fā)送新年祝福信息

    python實(shí)現(xiàn)QQ定時(shí)發(fā)送新年祝福信息

    大家好,本篇文章主要講的是python實(shí)現(xiàn)QQ定時(shí)發(fā)送新年祝福信息,感興趣的同學(xué)感快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • 一篇文章搞懂Python程序流程控制結(jié)構(gòu)

    一篇文章搞懂Python程序流程控制結(jié)構(gòu)

    這篇文章主要給大家介紹了關(guān)于Python程序流程控制結(jié)構(gòu)的相關(guān)資料,本節(jié)學(xué)習(xí)了Python程序的控制結(jié)構(gòu)之順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu),文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09

最新評論

枣强县| 曲阜市| 五河县| 离岛区| 罗源县| 茌平县| 咸阳市| 苗栗县| 龙门县| 惠东县| 全南县| 广宗县| 昌都县| 都昌县| 昌江| 南充市| 广德县| 栾城县| 平武县| 依兰县| 新兴县| 任丘市| 永顺县| 海原县| 闽侯县| 广宁县| 赤城县| 南城县| 商洛市| 通州区| 集安市| 上虞市| 新田县| 仪陇县| 正宁县| 荃湾区| 遵化市| 伊通| 文化| 砀山县| 渝中区|