- 浏览: 248119 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (127)
- vim (3)
- python (44)
- pymysql (1)
- mysql (9)
- macvim (1)
- erlang (3)
- twisted (0)
- tornado (5)
- django (7)
- postgresql (5)
- sql (1)
- java (7)
- tech (4)
- cache (1)
- lifestyle (3)
- html (1)
- ubuntu (2)
- rabbitmq (1)
- algorithm (8)
- Linux (4)
- Pythonista (1)
- thread (1)
- sort (6)
- 设计模式 (1)
- search (1)
- Unix (6)
- Socket (3)
- C (2)
- web (1)
- gc (1)
- php (10)
- macos (1)
最新评论
-
2057:
这个程序有bug。
查找算法学习之二分查找(Python版本)——BinarySearch -
dotjar:
NB
一个Python程序员的进化[转]
Contains:
堆排序以及堆排序的应用
堆排序(Heapsort)是指利用堆積這種資料結構所設計的一種排序算法。堆積是一個近似完滿二元樹的結構,並同時滿足堆積的性質:即子結點的键值或索引總是小於(或者大於)它的父節點。
建立堆,保持最大堆,堆排序(顶端最大元素与最后一个元素不断的交换)——整个过程。
使用heapq
参考资料:
http://zh.wikipedia.org/wiki/%E5%A0%86%E6%8E%92%E5%BA%8F
http://blog.csdn.net/v_july_v/article/details/6198644
http://docs.python.org/2/library/heapq.html
http://rosettacode.org/wiki/Sorting_algorithms/Heapsort
http://en.wikipedia.org/wiki/Heapsort
堆排序以及堆排序的应用
堆排序(Heapsort)是指利用堆積這種資料結構所設計的一種排序算法。堆積是一個近似完滿二元樹的結構,並同時滿足堆積的性質:即子結點的键值或索引總是小於(或者大於)它的父節點。
- 最差时间复杂度:O(nlogn)
- 最优时间复杂度:O(nlogn)
- 平均时间复杂度:O(nlogn)
建立堆,保持最大堆,堆排序(顶端最大元素与最后一个元素不断的交换)——整个过程。
#-*-coding:utf-8-*- def heap_sort(lst): for start in range((len(lst)-2)/2, -1, -1): siftdown(lst,start,len(lst)-1) for end in range(len(lst)-1, 0, -1): lst[end], lst[0] = lst[0], lst[end] siftdown(lst, 0, end - 1) return lst def siftdown(lst, start, end): root = start while True: child = 2*root + 1 if child > end:break if child+1<=end and lst[child] < lst[child+1]: child += 1 if lst[child] > lst[root]: lst[child],lst[root] = lst[root],lst[child] root=child else: break def main(): l=[3,4,1,8,2,9,6,5,7,10] print heap_sort(l) if __name__ == '__main__': main()
使用heapq
#!/usr/bin/env python #-*-encoding:utf-8-*- from heapq import heappush,heappop def heap_sort(iterable): h = [] for value in iterable: heappush(h, value) return [heappop(h) for i in range(len(h))] def main(): L = [1, 3, 5, 7, 9, 2, 4, 6, 8, 0] print heap_sort(L) if __name__ == "__main__": main()
参考资料:
http://zh.wikipedia.org/wiki/%E5%A0%86%E6%8E%92%E5%BA%8F
http://blog.csdn.net/v_july_v/article/details/6198644
http://docs.python.org/2/library/heapq.html
http://rosettacode.org/wiki/Sorting_algorithms/Heapsort
http://en.wikipedia.org/wiki/Heapsort
发表评论
-
macos 10.9.2 clang: error: unknown argument: '-mno-fused-madd' [-Wunused-command
2014-03-25 19:13 1769方法总是有的,当然需要你去寻找。 当然如果花费太多的时间在一件 ... -
PostgreSQL psycopg2:IndexError: tuple index out of range
2014-01-09 17:04 2234Postgresql psycopg2使用like查询的时候 ... -
Python 迭代器和生成器
2013-10-15 23:09 2854迭代器 迭代器只不过是一个实现迭代器协议的容器对象。它基于两个 ... -
Python时间模块
2013-10-15 23:03 3478time模块 时间模块中最常用的一个函数就是获取当前时间的函数 ... -
Python装饰器
2013-10-15 22:59 1572编写自定义装饰器有许多方法,但最简单和最容易理解的方法是编写一 ... -
python list
2013-10-15 22:56 1261简单总结以及整理如下: >>> dir( ... -
Python Excel
2013-09-10 17:21 980安装lib easy_install xlrd def ... -
python range xrange
2013-06-25 23:30 1158引用Help on built-in function ran ... -
python class
2013-06-25 00:54 1832引用类是创建新对象类 ... -
AttributeError: 'module' object has no attribute 'SendCloud'
2013-06-05 11:46 7093网上查了下 意思是说你命名的文件名不能和lib重名,这样会导 ... -
python string
2013-05-07 23:44 2202如果这就是字符串,这本来就是字符串 首先看下字符串的方法 ... -
Python property
2013-03-29 19:56 0由于之前有总结过,可以参考http://2057.iteye. ... -
python tips
2013-03-28 23:57 8891、enum #!/usr/bin/env python ... -
python decorators
2013-03-28 23:36 1371Contains: 1、decorators 2、funct ... -
python closures
2013-03-28 22:09 1195Closure:如果在一个内部函数里,对在外部作用域(但不是在 ... -
Python map、filter,reduce介绍
2013-03-28 22:02 13191、filter(function,iterable) 引用C ... -
Python __new__ 、__init__、 __call__
2013-03-26 23:49 5359Contains: __new__: 创建对象时调用,返回当 ... -
Python socket简介
2013-03-25 23:42 2182自豪地使用dir和help. Python 2.7.2 ( ... -
Tornado ioloop源码简析
2013-03-21 00:18 2857#!/usr/bin/env python #-*-en ... -
Tornado httpserver 源码简析
2013-03-17 01:49 1793整个流程就是创建一个socket socket.socket ...
相关推荐
# sort.heapSort() #堆排序 # sort.countSort() #计数排序 # sort.quickSort() #快速排序 该排序算法把每次的排序结果都列出来,可供初学者学习。 self.arr存放的是待排序列表,可改成自己的数据
堆排序是一种基于比较的排序算法,它利用了数据结构中的“堆”这一概念。在计算机科学中,堆是一个近似完全二叉树的结构,并同时满足堆的性质:即子节点的键值或索引总是小于(或者大于)它的父节点。堆可以分为大...
堆排序是一种基于比较的排序算法,它通过构造一个近似完全二叉树的堆数据结构来实现排序。在计算机科学中,堆是一个可以被看作一棵完全二叉树的数组对象,其中每个父节点的值都大于或等于其子节点的值(大顶堆)或者...
HeapSort(堆排序)是一种基于比较的排序算法,由Napier和Rabin于1964年提出,后经William H. Press进一步发展。它利用了二叉堆这一数据结构,实现了在平均和最坏情况下的O(n log n)时间复杂度,具有原地排序和稳定...
Python堆排序是一种基于比较的排序算法,其原理和实现方式具有独特性。堆排序的核心是利用了二叉堆(一种特殊的完全二叉树)的性质,它可以被看作是一个近似于完全平衡的树状结构,分为大顶堆(父节点的值大于或等于...
`usort`库可能会包含一些高级排序算法,如快速排序(quicksort)、归并排序(mergesort)或堆排序(heapsort)。这些算法相对于Python内置的TimSort算法,在特定场景下可能提供更快的排序速度,尤其是在处理大规模...
1. **排序算法**:如快速排序(quicksort)、归并排序(mergesort)、插入排序(insertionsort)、选择排序(selectionsort)以及堆排序(heapsort)。它们用于对数据进行有序排列,理解每种算法的时间复杂度和适用...
1. 排序算法:快速排序(quicksort.py)、归并排序(mergesort.py)、堆排序(heapsort.py)。 2. 搜索算法:二分查找(binary_search.py)、线性查找(linear_search.py)、回溯搜索(backtracking.py)。 3. 图...
- `kind`:用于指定排序算法,如'quicksort'(快速排序,默认)、'mergesort'(归并排序,稳定)或'heapsort'(堆排序)。 - `order`:用于控制排序时考虑数组的字段顺序,通常在排序结构化数组时使用。 了解了...
这种数据结构在计算机科学中有着广泛的应用,比如优先队列、排序算法(如Heapsort)以及某些搜索算法。 Python是一种强大的编程语言,它的简洁性和灵活性使其成为实现数据结构的理想选择。在Python中创建Max-Heap类...
- **问题背景**:构建优先堆是数据结构学习中的一个重要内容,题目要求给出一组数值,并写出构建优先堆的算法代码,同时分析时间复杂度。 - **解答示例**: ```python def heapify(arr, n, i): largest = i # ...