堆排序的Python代码

# -*- coding: utf-8 -*-
"""
Created on Fri Jul  5 10:13:16 2019

@author: Yuki
"""

def heapAdjust(nums, Len, index):
    left = index*2 + 1
    right = index*2 + 2
    
    maxIndex = index
    if left<Len and nums[left] > nums[maxIndex]:
        maxIndex = left
    if right < Len and nums[right]>nums[maxIndex]:
        maxIndex = right
    
    if maxIndex != index:
        nums[index], nums[maxIndex] = nums[maxIndex], nums[index]
        heapAdjust(nums, Len, maxIndex)
      
def heapSort(nums):
    Len = len(nums)
    #构建大根堆(从最后一个非叶子节点向上)
    for i in range(Len//2-1, -1, -1):
        heapAdjust(nums, Len, i)
    
    for i in range(len(nums)-1, 0, -1):
        nums[0], nums[i] = nums[i], nums[0] #  将当前最大的放置到数组末尾
        heapAdjust(nums, i, 0)             # 将未完成排序的部分继续进行堆排序
    return nums

nums = [100,20,5,40,888,432,-100,-5]

res = heapSort(nums)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值