堆排序python理解 堆排序Python實現

2021-10-13 11:01:32 字數 1945 閱讀 1682

def heap_sort(nos):

global size

size = len(nos)

print "the size of the list is : %d " %size

build_heap(size,nos)

for i in range(size-1,0,-1):

nums[0],nums[i] = nums[i],nums[0]

size = size-1

print "\n", nums

heapify(nos,i,size)

print "heap sort array:" ,nums

def left_child(i):

return 2*i+1

def right_child(i):

return 2*i+2

def heapify(nums,i,size):

l = left_child(i)

r = right_child(i)

if l <= size and r <= size:

if r != size:

if nums[l] >= nums[r]:

max = nums[l]

max_index = l

elif nums[l] <= nums[r]:

max = nums[r]

max_index = r

if nums[i] >= max:

print nums

return

elif nums[i] <= max:

nums[i],nums[max_index] = max,nums[i]

heapify(nums,max_index,size)

else:

nums[i],nums[l] = nums[l],nums[i]

print nums

# build a heap a from an unsorted array

def build_heap(size,elements):

iterate = size//2-1

for i in range(iterate,-1,-1):

print "in %d iteration" %i

heapify(elements,i,size)

print "heapified array is : " ,elements

if __name__ == '__main__':

#get input from user

nums = [6,9,3,2,4,1,7,5,10]

#sort the list

heap_sort(nums)

我得到的輸出是這樣的:the size of the list is : 9

in 3 iteration

[6, 9, 3, 10, 4, 1, 7, 5, 2]

in 2 iteration

[6, 9, 7, 10, 4, 1, 3, 5, 2]

in 1 iteration

[6, 10, 7, 9, 4, 1, 3, 5, 2]

[6, 10, 7, 9, 4, 1, 3, 5, 2]

in 0 iteration

[10, 6, 7, 9, 4, 1, 3, 5, 2]

[10, 9, 7, 6, 4, 1, 3, 5, 2]

[10, 9, 7, 6, 4, 1, 3, 5, 2]

heapified array is : [10, 9, 7, 6, 4, 1, 3, 5, 2]

heap sort array:

[9, 7, 6, 4, 1, 3, 5, 2, 10]

我嘗試用python實現堆排序演算法。最終輸出未排序。我想弄清楚醫療手術出了什麼問題,但找不到。

有人能指出我的**中的錯誤並提出解決方案嗎?

python堆排序演算法 Python 堆排序

python 堆排序 堆排序 heapsort 是指利用堆這種資料結構所設計的一種排序演算法。堆積是乙個近似完全二叉樹的結構,並同時滿足堆積的性質 即子結點的鍵值或索引總是小於 或者大於 它的父節點。堆排序可以說是一種利用堆的概念來排序的選擇排序。largest i l 2 i 1 left 2 i...

堆排序 堆排序優化 索引堆排序

堆排序 堆排序優化 索引堆排序 注 堆排序 索引堆排序 都是不穩定的排序。注 索引最大堆排序有誤!有沒有大神可以指點一二?1 堆 所有元素 都從索引0開始 父親結點索引 i 左孩子結點索引 2i 1 右孩子結點索引 2i 2 左後乙個非葉子結點索引 n 1 2 用於構建堆,從最後乙個非葉子結點索引開...

堆排序 堆排序優化 索引堆排序

堆排序 堆排序優化 索引堆排序 注 堆排序 索引堆排序 都是不穩定的排序。注 索引最大堆排序有誤!有沒有大神可以指點一二?1 堆 所有元素 都從索引0開始 父親結點索引 i 左孩子結點索引 2i 1 右孩子結點索引 2i 2 左後乙個非葉子結點索引 n 1 2 用於構建堆,從最後乙個非葉子結點索引開...