堆排序的python实现
来源:互联网 发布:对妹妹做过什么 知乎 编辑:程序博客网 时间:2024/06/05 19:06
堆排序是利用堆(大顶堆或小顶堆都可)的性质,每次从堆顶取一个元素,然后对堆重新调整,最后完成排序的排序算法,时间复杂度和快速排序、归并排序一样都是O(n*log n)。并且堆的最坏时间复杂度和最优时间复杂度都是O(n*log n),比较稳定。由于需要建立一个堆,所以空间复杂度是n。
# -*- coding: utf-8 -*-"""https://zh.wikipedia.org/zh/%E5%A0%86%E6%8E%92%E5%BA%8F#Python.E8.AF.AD.E8.A8.80"""def sift_down(arr, start, end): root = start while True: # 从root开始对最大堆调整 child = 2 * root + 1 if child > end: break # 找出两个child中交大的一个 if child + 1 <= end and arr[child] < arr[child + 1]: child += 1 if arr[root] < arr[child]: # 最大堆小于较大的child, 交换顺序 arr[root], arr[child] = arr[child], arr[root] # 正在调整的节点设置为root root = child else: # 无需调整的时候, 退出 breakdef heap_sort(arr): # 从最后一个有子节点的孩子还是调整最大堆 first = len(arr) // 2 - 1 for start in range(first, -1, -1): sift_down(arr, start, len(arr) - 1) # 将最大的放到堆的最后一个, 堆-1, 继续调整排序 for end in range(len(arr) -1, 0, -1): arr[0], arr[end] = arr[end], arr[0] sift_down(arr, 0, end - 1)def main(): # [7, 95, 73, 65, 60, 77, 28, 62, 43] # [3, 1, 4, 9, 6, 7, 5, 8, 2, 10] l = [3, 1, 4, 9, 6, 7, 5, 8, 2, 10] print l heap_sort(l) print lif __name__ == "__main__": main()
0 0
- 堆排序的python实现
- Python实现 [堆] [堆排序]
- 堆排序PYTHON实现
- Python实现堆排序
- 堆排序python实现
- Python实现堆排序
- python实现堆排序
- python 实现堆排序
- 堆排序python实现
- Python 实现堆排序
- 快速排序、堆排序、归并排序的python实现
- 排序算法集合(1)-Python实现的堆排序
- 利用Python实现堆排序
- 堆排序及python实现
- 堆排序python语言实现
- 堆排序算法实现 Python
- 堆排序的实现
- 堆排序的实现
- 大数据系列修炼-Scala课程72
- Java集合——ArrayList源码详解
- 大数据系列修炼-Scala课程73
- 2016国庆节装机经验
- 多线程的使用
- 堆排序的python实现
- hibernate集成复习
- 笔记8:构造方法和匿名对象
- Android数据存储五种方式总结
- ubuntu修改主机名
- 文件描述符和文件指针的区别
- HDU 4055 Number String(DP)
- 图像缩放之最近邻插值
- Toast优化