def AdjustUp(nums, k, n): #用于插入新值
i = 2*k
temp = nums[k]
while i>0 and nums[i]<temp:
nums[k] = nums[i]
k = i
i /= 2
nums[k] = temp
def AdjustDown(nums, k, n):
i = 2*k
temp = nums[k]
while i<=n:
if (i+1<=n and nums[i]<nums[i+1]):
i += 1
if temp>=nums[i]:
break
nums[k] = nums[i]
k = i
i *= 2
nums[k] = temp
def BuildMaxHeap(nums, n):
adjustNode = n/2
while adjustNode>=1:
AdjustDown(nums, adjustNode, n)
adjustNode -= 1
def MaxHeapSort(nums, n):
BuildMaxHeap(nums, n)
for i in range(n, 1,-1):
temp = nums[1]
nums[1] = nums[i]
nums[i] = temp
AdjustDown(nums, 1, i-1)
if __name__ == '__main__':
nums = [int(i) for i in raw_input().split()]
n = len(nums)
nums.insert(0, 0)
MaxHeapSort(nums, n)
for i in nums[1:]:
print i,
print ""
堆排序(最大堆) Python实现
最新推荐文章于 2022-10-11 12:02:40 发布