从品牌网站建设到网络营销策划,从策略到执行的一站式服务
本文实例讲述了Python实现的堆排序算法。分享给大家供大家参考,具体如下:
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:国际域名空间、雅安服务器托管、营销软件、网站建设、绵阳网站维护、网站推广。堆排序的思想: 堆是一种数据结构,可以将堆看作一棵完全二叉树,这棵二叉树满足,任何一个非叶节点的值都不大于(或不小于)其左右孩子节点的值。 将一个无序序列调整为一个堆,就可以找出这个序列的大值(或最小值),然后将找出的这个值交换到序列的最后一个,这样有序序列就元素就增加一个,无序序列元素就减少一个,对新的无序序列重复这样的操作,就实现了排序。
堆排序的执行过程:
1.从无序序列所确定的完全二叉树的第一个非叶子节点开始,从右至左,从下至上,对每个节点进行调整,最终将得到一个大顶堆。
对节点的调整方法:将当前节点(假设为a)的值与其孩子节点进行比较,如果存在大于a的值的孩子节点,则从中选出大的一个与a交换。当a来到下一层的时候重复上述过程,直到a的孩子节点的值都小于a为止
2.将当前无序序列中的第一个元素(反映在数中是根节点b),与无序序列中的最后一个元素交换(假设为c),b进入有序序列,到达最终位置。无序序列元素减少1个,有序序列元素增加1个,此时只有节点c可能不满足堆的定义,对其进行调整。
3.重复2 的过程,直到无序序列的元素剩下一个时排序结束。
# -*- coding:utf-8 -*- # 堆排序适用于记录数很多的情况 from collections import deque # 这里需要说明元素的存储必须要从1开始 # 涉及到左右节点的定位,和堆排序开始调整节点的定位 # 在下标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的左孩子节点(cheer!) i = low j = 2*i while j<=high: # 如果右节点较大,则把j指向右节点 if j
网页标题:Python实现的堆排序算法示例-创新互联
转载注明:http://www.cdkjz.cn/article/ddgeip.html
成都网站建设公司地址:成都市青羊区太升南路288号锦天国际A座10层 建设咨询028-86922220
成都快上网科技有限公司-四川网站建设设计公司 | 蜀ICP备19037934号 Copyright 2020,ALL Rights Reserved cdkjz.cn | 成都网站建设 | © Copyright 2020版权所有.
专家团队为您提供成都网站建设,成都网站设计,成都品牌网站设计,成都营销型网站制作等服务,成都建网站就找快上网! | 成都网站建设哪家好? | 网站建设地图