欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Python實現(xiàn)的堆排序算法示例-創(chuàng)新互聯(lián)

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

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:國際域名空間、雅安服務(wù)器托管、營銷軟件、網(wǎng)站建設(shè)、綿陽網(wǎng)站維護(hù)、網(wǎng)站推廣。

堆排序的思想: 堆是一種數(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é)束。

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

# -*- 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],

文章標(biāo)題:Python實現(xiàn)的堆排序算法示例-創(chuàng)新互聯(lián)
文章路徑:http://chinadenli.net/article8/ddgeip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、外貿(mào)建站搜索引擎優(yōu)化、面包屑導(dǎo)航品牌網(wǎng)站制作、建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司