前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 ># 堆排序

# 堆排序

作者头像
用户1175783
发布2019-09-10 14:38:17
2990
发布2019-09-10 14:38:17
举报

# 堆排序

### 原理

代码语言:javascript
复制
1. 第一步将无序集合构造成一个无序二叉堆
2. 从二叉堆的最后一个节(n/2)点开始,从子节点中找出最小的一个与父节点交换,
3. 将二叉堆的所有节点遍历一遍后即得到最小值,
4. 将最后一个叶子与该最小值交换,此时第一遍遍历完成
5. 重复2-4的步骤,直到排序完成

# 实现

代码语言:javascript
复制
inputArr=[199383, 10, 34, -1, -32, -29, 4, 0, 34, 5, 4, 36, 1, 8, 123, 453, 1008]
print("未排序集合:{0}".format(inputArr))
length=len(inputArr)
sortArr=[None]*len(inputArr)

for sortIndex in range(0,length):
    # 剩余待排序的节点个数
    nodeIndex=(length-sortIndex)//2-1
    while nodeIndex>=0:
        node=[nodeIndex,nodeIndex*2+1,nodeIndex*2+2]
        min=inputArr[node[0]]
        for index in range(1,len(node)):
            max=inputArr[node[index]]
            if(min>max):
                inputArr[node[0]],inputArr[node[index]]=max,min
                min=max
        nodeIndex-=1
    # 第一轮排序的最小值
    sortArr[sortIndex]=inputArr[0]
    if(length-sortIndex-1==0):
        break
    # 将最后一个叶子与第一个节点交换
    inputArr[0]=inputArr[length-sortIndex-1]

print("已排序集合:{0}".format(sortArr))
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • # 堆排序
    • # 实现
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档