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

Python實現(xiàn)的堆排序算法示例

 更新時間:2018年04月29日 11:17:23   作者:Vam.Dora.L  
這篇文章主要介紹了Python實現(xiàn)的堆排序算法,結(jié)合實例形式分析了堆排序的原理及Python定義與使用堆排序算法的相關(guān)操作技巧,需要的朋友可以參考下

本文實例講述了Python實現(xiàn)的堆排序算法。分享給大家供大家參考,具體如下:

堆排序的思想: 堆是一種數(shù)據(jù)結(jié)構(gòu),可以將堆看作一棵完全二叉樹,這棵二叉樹滿足,任何一個非葉節(jié)點的值都不大于(或不小于)其左右孩子節(jié)點的值。 將一個無序序列調(diào)整為一個堆,就可以找出這個序列的最大值(或最小值),然后將找出的這個值交換到序列的最后一個,這樣有序序列就元素就增加一個,無序序列元素就減少一個,對新的無序序列重復(fù)這樣的操作,就實現(xiàn)了排序。

堆排序的執(zhí)行過程:

1.從無序序列所確定的完全二叉樹的第一個非葉子節(jié)點開始,從右至左,從下至上,對每個節(jié)點進(jìn)行調(diào)整,最終將得到一個大頂堆。

對節(jié)點的調(diào)整方法:將當(dāng)前節(jié)點(假設(shè)為a)的值與其孩子節(jié)點進(jìn)行比較,如果存在大于a的值的孩子節(jié)點,則從中選出最大的一個與a交換。當(dāng)a來到下一層的時候重復(fù)上述過程,直到a的孩子節(jié)點的值都小于a為止

2.將當(dāng)前無序序列中的第一個元素(反映在數(shù)中是根節(jié)點b),與無序序列中的最后一個元素交換(假設(shè)為c),b進(jìn)入有序序列,到達(dá)最終位置。無序序列元素減少1個,有序序列元素增加1個,此時只有節(jié)點c可能不滿足堆的定義,對其進(jìn)行調(diào)整。

3.重復(fù)2 的過程,直到無序序列的元素剩下一個時排序結(jié)束。

# -*- coding:utf-8 -*-
# 堆排序適用于記錄數(shù)很多的情況
from collections import deque
# 這里需要說明元素的存儲必須要從1開始
# 涉及到左右節(jié)點的定位,和堆排序開始調(diào)整節(jié)點的定位
# 在下標(biāo)0處插入0,它不參與排序
L = deque([49,38,65,97,76,13,27,49])
L.appendleft(0)
#L = [0,49,38,65,97,76,13,27,49]
def element_exchange(numbers,low,high):
  temp = numbers[low]
  # j 是low的左孩子節(jié)點(cheer!)
  i = low
  j = 2*i
  while j<=high:
    # 如果右節(jié)點較大,則把j指向右節(jié)點
    if j<high and numbers[j]<numbers[j+1]:
      j = j+1
    if temp<numbers[j]:
      # 將numbers[j]調(diào)整到雙親節(jié)點的位置上
      numbers[i] = numbers[j]
      i = j
      j = 2*i
    else:
      break
  # 被調(diào)整節(jié)點放入最終位置
  numbers[i] = temp
def top_heap_sort(numbers):
  length = len(numbers)-1
  # 指定第一個進(jìn)行調(diào)整的元素的下標(biāo)
  # 它即該無序序列完全二叉樹的第一個非葉子節(jié)點
  # 它之前的元素均要進(jìn)行調(diào)整
  # cheer up!
  first_exchange_element = length/2
  #建立初始堆
  print first_exchange_element
  for x in range(first_exchange_element):
    element_exchange(numbers,first_exchange_element-x,length)
  # 將根節(jié)點放到最終位置,剩余無序序列繼續(xù)堆排序
  # length-1 次循環(huán)完成堆排序
  for y in range(length-1):
    temp = numbers[1]
    numbers[1] = numbers[length-y]
    numbers[length-y] = temp
    element_exchange(numbers,1,length-y-1)
if __name__=='__main__':
  top_heap_sort(L)
  for x in range(1,len(L)):
    print L[x],

運行結(jié)果:

PS:這里再為大家推薦一款關(guān)于排序的演示工具供大家參考:

在線動畫演示插入/選擇/冒泡/歸并/希爾/快速排序算法過程工具:
http://tools.jb51.net/aideddesign/paixu_ys

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python列表(list)操作技巧總結(jié)》、《Python編碼操作技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進(jìn)階經(jīng)典教程

希望本文所述對大家Python程序設(shè)計有所幫助。

相關(guān)文章

  • python中可以聲明變量類型嗎

    python中可以聲明變量類型嗎

    在本篇文章里小編給大家整理了關(guān)于python中聲明變量類型的相關(guān)知識點,需要的朋友們可以學(xué)習(xí)下。
    2020-06-06
  • pandas實現(xiàn)數(shù)據(jù)可視化的示例代碼

    pandas實現(xiàn)數(shù)據(jù)可視化的示例代碼

    本文主要介紹了pandas實現(xiàn)數(shù)據(jù)可視化的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • python中函數(shù)默認(rèn)值使用注意點詳解

    python中函數(shù)默認(rèn)值使用注意點詳解

    下面小編就為大家?guī)硪黄猵ython中函數(shù)默認(rèn)值使用注意點詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • Python練習(xí)之讀取XML節(jié)點和屬性值的方法

    Python練習(xí)之讀取XML節(jié)點和屬性值的方法

    這篇文章主要介紹了Python練習(xí)之讀取XML節(jié)點和屬性值的方法,通過parse函數(shù)可以讀取XML文檔,該函數(shù)返回ElementTree類型的對象,通過該對象的iterfind方法可以對XML中特定節(jié)點進(jìn)行迭代
    2022-06-06
  • python的XIsxWriter操作Excel示例詳解

    python的XIsxWriter操作Excel示例詳解

    這篇文章主要介紹了python的XIsxWriter操作Excel示例詳解,xlsxwriter是一個專門用于創(chuàng)建、寫入和操作Excel文件的Python模塊,它提供了豐富的功能和選項,能夠創(chuàng)建復(fù)雜的Excel文檔,需要的朋友可以參考下
    2023-09-09
  • Python3去除頭尾指定字符的函數(shù)strip()、lstrip()、rstrip()用法詳解

    Python3去除頭尾指定字符的函數(shù)strip()、lstrip()、rstrip()用法詳解

    這篇文章主要介紹了Python3去除頭尾指定字符的函數(shù)strip()、lstrip()、rstrip()用法詳解,需要的朋友可以參考下
    2021-04-04
  • 詳解Python枚舉的定義與用法

    詳解Python枚舉的定義與用法

    這篇文章主要介紹了詳解Python枚舉的定義與用法,在Python中,枚舉和我們在對象中定義的類變量時一樣的,每一個類變量就是一個枚舉項,需要的朋友可以參考下
    2023-04-04
  • Python實現(xiàn)的概率分布運算操作示例

    Python實現(xiàn)的概率分布運算操作示例

    這篇文章主要介紹了Python實現(xiàn)的概率分布運算操作,涉及Python概率運算與圖形繪制相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08
  • Python使用sqlite3第三方庫讀寫SQLite數(shù)據(jù)庫的方法步驟

    Python使用sqlite3第三方庫讀寫SQLite數(shù)據(jù)庫的方法步驟

    數(shù)據(jù)庫非常重要,程序的數(shù)據(jù)增刪改查需要數(shù)據(jù)庫支持,python處理數(shù)據(jù)庫非常簡單,而且不同類型的數(shù)據(jù)庫處理邏輯方式大同小異,下面這篇文章主要給大家介紹了關(guān)于Python使用sqlite3第三方庫讀寫SQLite數(shù)據(jù)庫的方法步驟,需要的朋友可以參考下
    2022-07-07
  • Python自動化實現(xiàn)日報數(shù)據(jù)可視化

    Python自動化實現(xiàn)日報數(shù)據(jù)可視化

    這篇文章主要為大家詳細(xì)介紹了如何使用Python實現(xiàn)自動化生成日報數(shù)據(jù)可視化,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-02-02

最新評論

柳江县| 花垣县| 霍林郭勒市| 岚皋县| 新丰县| 玛沁县| 洛隆县| 广元市| 汽车| 托克托县| 苏尼特左旗| 临泉县| 当阳市| 潼南县| 南部县| 金山区| 连江县| 齐河县| 长葛市| 黄冈市| 咸宁市| 平谷区| 平利县| 江阴市| 昌都县| 洪雅县| 隆林| 台中市| 蒙阴县| 天祝| 宿州市| 大英县| 嘉峪关市| 华池县| 澄城县| 理塘县| 台北市| 柳林县| 日喀则市| 滨州市| 固始县|