`

排序算法学习(python版本)之堆排序(HeapSort)

阅读更多
Contains:
堆排序以及堆排序的应用
堆排序(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
分享到:
评论

相关推荐

    python常用排序算法汇总

    # sort.heapSort() #堆排序 # sort.countSort() #计数排序 # sort.quickSort() #快速排序 该排序算法把每次的排序结果都列出来,可供初学者学习。 self.arr存放的是待排序列表,可改成自己的数据

    堆排序 heapsort

    堆排序是一种基于比较的排序算法,它利用了数据结构中的“堆”这一概念。在计算机科学中,堆是一个近似完全二叉树的结构,并同时满足堆的性质:即子节点的键值或索引总是小于(或者大于)它的父节点。堆可以分为大...

    堆排序算法的副本.zip

    堆排序是一种基于比较的排序算法,它通过构造一个近似完全二叉树的堆数据结构来实现排序。在计算机科学中,堆是一个可以被看作一棵完全二叉树的数组对象,其中每个父节点的值都大于或等于其子节点的值(大顶堆)或者...

    09 HeapSort.zip

    HeapSort(堆排序)是一种基于比较的排序算法,由Napier和Rabin于1964年提出,后经William H. Press进一步发展。它利用了二叉堆这一数据结构,实现了在平均和最坏情况下的O(n log n)时间复杂度,具有原地排序和稳定...

    Python堆排序原理与实现方法详解

    Python堆排序是一种基于比较的排序算法,其原理和实现方式具有独特性。堆排序的核心是利用了二叉堆(一种特殊的完全二叉树)的性质,它可以被看作是一个近似于完全平衡的树状结构,分为大顶堆(父节点的值大于或等于...

    Python库 | usort-0.6.2.tar.gz

    `usort`库可能会包含一些高级排序算法,如快速排序(quicksort)、归并排序(mergesort)或堆排序(heapsort)。这些算法相对于Python内置的TimSort算法,在特定场景下可能提供更快的排序速度,尤其是在处理大规模...

    algorithm templates and leetcode examples in Python3, you .zip

    1. **排序算法**:如快速排序(quicksort)、归并排序(mergesort)、插入排序(insertionsort)、选择排序(selectionsort)以及堆排序(heapsort)。它们用于对数据进行有序排列,理解每种算法的时间复杂度和适用...

    algorithm-python:编码面试的算法实践

    1. 排序算法:快速排序(quicksort.py)、归并排序(mergesort.py)、堆排序(heapsort.py)。 2. 搜索算法:二分查找(binary_search.py)、线性查找(linear_search.py)、回溯搜索(backtracking.py)。 3. 图...

    浅析python中numpy包中的argsort函数的使用

    - `kind`:用于指定排序算法,如'quicksort'(快速排序,默认)、'mergesort'(归并排序,稳定)或'heapsort'(堆排序)。 - `order`:用于控制排序时考虑数组的字段顺序,通常在排序结构化数组时使用。 了解了...

    Max-Heap:用Python制作的Max Heap类

    这种数据结构在计算机科学中有着广泛的应用,比如优先队列、排序算法(如Heapsort)以及某些搜索算法。 Python是一种强大的编程语言,它的简洁性和灵活性使其成为实现数据结构的理想选择。在Python中创建Max-Heap类...

    2019复旦大学961真题题回忆版.docx

    - **问题背景**:构建优先堆是数据结构学习中的一个重要内容,题目要求给出一组数值,并写出构建优先堆的算法代码,同时分析时间复杂度。 - **解答示例**: ```python def heapify(arr, n, i): largest = i # ...

Global site tag (gtag.js) - Google Analytics