#coding:utf-8#author:徐卜灵#堆排序适用于记录数很多的情况#与快速排序,归并排序 时间复杂一样都是n*log(n)

############################################################################################################################################################

#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

#def top_heap_sort(numbers):#

#length = len(numbers)-1#

## 指定第一个进行调整的元素的下标## 它即该无序序列完全二叉树的第一个非叶子节点## 它之前的元素均要进行调整## cheer up!#first_exchange_element = length/2#

##建立初始堆#print first_exchange_element#for x in range(first_exchange_element):#element_exchange(numbers,first_exchange_element-x,length)#

## 将根节点放到最终位置,剩余无序序列继续堆排序## length-1 次循环完成堆排序#for y in range(length-1):#temp = numbers[1]#numbers[1] = numbers[length-y]#numbers[length-y] = temp#element_exchange(numbers,1,length-y-1)#

#if __name__=='__main__':#top_heap_sort(L)#LL = []#for x in range(1,len(L)):## print L[x],#LL.append(L[x])#print LL##########################################################################################################################################

defbuild_maxheap(L,len):for i in range(len/2,0,-1):#print i

adjustdown(L,i,len)returnLdef adjustdown(L,low,high): #这里只是把一个位于low位置上的数向下移动。

temp =L[low]

i=low

j= 2 *iwhile j <=high:#if j <= high and L[j] < L[j+1]:#z这里的L[j+1]可能不存在,所有会有out of index 报错.

#j+=1

if j <= high and j + 1 <=high:if L[j] < L[j+1]:

j+=1

if L[j]>temp:

L[i]=L[j]

i=j

j= 2 *ielse:breakL[i]=temp#return L #由于这里是中间列表,不要输出。

#print L#L = [0,49,38,65,97,76,13,67,47]#L = build_maxheap(L,8)#del L[0]## print type(L)#print "大根堆第一次:",L

len= len(L)-1

defHeap_sort(L,len):

build_maxheap(L,len)for i in range(len,1,-1):

L[i],L[1] = L[1],L[i]#print i

#print L[len],L[1]

adjustdown(L,1,i-1)returnL

L= [49,38,65,97,76,13,67,47]print "原列表:",L

L.insert(0,0)

L=Heap_sort(L,len)delL[0]print "堆排序:",L#基本思路是:#1先从后到前进行小数下移的操作。这个后是指len(L)/2#2.第一步完成后,最大的那个数就上移到了根节点。把这个根节点与最后一个元素交换位置,这时最后一个元素就在有序区里。则只需要将第一个元素再进行下移操作即可。#3.循环第二步,直到只剩下根节点。

堆排序python代码实现_八大排序算法的python实现(五)堆排序相关推荐

  1. python 八大排序_八大排序算法的 Python 实现

    1.插入排序 def insert_sort(lists): # 插入排序 count = len(lists) for i in range(1, count): key = lists[i] j  ...

  2. 八大排序算法的 Python 实现

    八大排序算法的 Python 实现 本文用Python实现了插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个数据插入 ...

  3. 精通八大排序算法系列:二、堆排序算法

    精通八大排序算法系列:二.堆排序算法 作者:July .二零一一年二月二十日 本文参考:Introduction To Algorithms,second edition. ------------- ...

  4. Python数据结构常见的八大排序算法(详细整理)

    前言 八大排序,三大查找是<数据结构>当中非常基础的知识点,在这里为了复习顺带总结了一下常见的八种排序算法. 常见的八大排序算法,他们之间关系如下: 排序算法.png 他们的性能比较: 下 ...

  5. 冒泡和快速排序的时间复杂度_八大排序算法性能分析及总结

    一.排序算法说明 排序的定义:对一个无序的序列进行排序的过程. 输入:n个数:a1,a2,a3,-,an. 输出:n个数的排列:a1,a2,a3,-,an,使得a1<=a2<=a3< ...

  6. python实现希尔排序_希尔排序算法的python实现

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. def shellSort(items): inc = len(items) / 2 wh ...

  7. 冒泡排序c++代码_八大排序算法(解释+代码+结果+算法优化)

    >>>欢迎点赞,收藏,转发! 评论区获取源代码与更多更全干货!<<< 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,不需要访问外存便能完成 ...

  8. 距离矢量路由算法的java代码_八大排序算法比较(附Java代码)

    冒泡排序 /*** 冒泡排序 比较好理解* 两两相比 较大的放后面* 时间复杂度O(n^2)*//*** 改进前的冒泡排序算法进行100,000数据排序运行时间为:3829ms* 优化后的冒泡排序算法 ...

  9. 写代码?程序猿?你不能不懂的八大排序算法的Python实现

    信息获取后通常需要进行处理,处理后的信息其目的是便于人们的应用.信息处理方法有多种,通常由数据的排序,查找,插入,删除等操作.本章介绍几种简单的数据排序算法和高效的排序算法. 本章主要涉及到的知识点有 ...

  10. python基础===八大排序算法的 Python 实现

    本文用Python实现了插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一 ...

最新文章

  1. 干货|TensorFlow开发环境搭建(Ubuntu16.04+GPU+TensorFlow源码编译)
  2. 很简单的自定义友好链接实现 .net core 2
  3. Heartbeat VIP/IP 与 别名/辅助IP
  4. [蓝桥杯][算法提高VIP]数的划分(记忆化搜索)
  5. final 在java,final 在java中的注意点
  6. clean build 的区别(转)
  7. EventBus框架原理解析(结合源代码)(上)
  8. springboot集成微信app支付
  9. CAD2019的使用
  10. 说说技术总监的三板斧(十年肺腑之言)
  11. 解决RuntimeException: Parcel android.os.Parcel@*: Unmarshalling unknown type code * at offset * 异常
  12. ArcGIS—数据类型(1):Coverage数据
  13. android 手机 apk安装失败对应码
  14. 重力感应贪吃蛇(C51 MPU6050 8*8LED点阵)
  15. 我用scratch做了个二分查找
  16. SI512国产13.56MHz低功耗NFC前端芯片替代PN532/PN512
  17. C语言中的选择结构——if语句/if...else语句
  18. [转]社区运营必读之天涯志
  19. SkipList(跳表)
  20. Docker的安装部署及优化详解(汇总版,学习docker这一篇就够了)

热门文章

  1. 阶段3 2.Spring_01.Spring框架简介_05.spring的优势
  2. 针对利用tzselect修改时间及ln -sf 修改系统时间不好使的情况 linux 6.5
  3. Zabbix proxy配置
  4. postman 测试http post的json请求
  5. 无刷新上传图片 可以实时预览 选择图片后即自动上传,没有上传按钮
  6. asp.net5开发中DNX SDK版本的影响
  7. 如何将位图格式图片文件(.bmp)生成geotiff格式图片?
  8. [leetcode]Insert Interval
  9. 四个数学软件主要特点
  10. eclipse远程发布代码的方法(SSH自动同步)