python实现【堆排序】(Heap Sort)

简介: python实现【堆排序】(Heap Sort)

python实现【堆排序】(HeapSort)


算法原理及介绍


堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法*实质是一个近似完全二叉树的结构*,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序


算法过程描述


  1. 将初始待排序关键字序列(R1,R2….Rn)构建成大顶堆,此堆为初始的无序区;


  1. 将堆顶元素R[1]与最后一个元素R[n]交换,此时得到新的无序区(R1,R2,……Rn-1)和新的有序区(Rn),且满足R[1,2…n-1]<=R[n];


  1. 由于交换后新的堆顶R[1]可能违反堆的性质,因此需要对当前无序区(R1,R2,……Rn-1)调整为新堆,然后再次将R[1]与无序区最后一个元素交换,得到新的无序区(R1,R2….Rn-2)和新的有序区(Rn-1,Rn)。不断重复此过程直到有序区的元素个数为n-1,则整个排序过程完成。


算法排序图解如下


2020120115195579.gif


python实现代码


def heapify(arr, n, i):
    # 构建大顶堆
    largest = i
    l = 2 * i + 1  # left = 2*i + 1
    r = 2 * i + 2  # right = 2*i + 2
    if l < n and arr[i] < arr[l]:
        largest = l
    if r < n and arr[largest] < arr[r]:
        largest = r
    if largest != i:
        arr[i], arr[largest] = arr[largest], arr[i]  # 交换
        heapify(arr, n, largest)
def heapSort(arr):
    n = len(arr)
    # 构建大顶堆
    for i in range(n, -1, -1):
        heapify(arr, n, i)
    for i in range(n - 1, 0, -1):
        # 一个个交换元素
        arr[i], arr[0] = arr[0], arr[i]  # 交换
        heapify(arr, i, 0)
    return arr



相关文章
|
8月前
|
Python
python sort和sorted的区别
在Python中,sort()和sorted()都是用于排序的函数,但它们之间存在一些关键的区别,这些区别主要体现在它们的应用方式、操作对象以及对原始数据的影响上。
|
8月前
|
算法 Python
用 Python 实现堆排序。
用 Python 实现堆排序。
51 3
|
算法 搜索推荐 Python
Python算法——堆排序
Python算法——堆排序
84 2
|
4月前
|
Python
Python sorted() 函数和sort()函数对比分析
Python sorted() 函数和sort()函数对比分析
|
7月前
|
自然语言处理 Python
python技巧:数组排序sort,all方法
python技巧:数组排序sort,all方法
|
6月前
|
算法 安全 调度
逆天改命!Python高级数据结构堆(Heap)与优先队列,让你的算法效率飙升至宇宙级!
【7月更文挑战第8天】Python的heapq模块和queue.PriorityQueue实现了堆和优先队列,提供高效算法解决方案。堆用于Dijkstra算法求解最短路径,例如在图论问题中;PriorityQueue则在多线程下载管理中确保高优先级任务优先执行。这两个数据结构提升效率,简化代码,是编程中的强大工具。
66 0
|
8月前
|
算法 Python
Python中不使用sort对列表排序的技术
Python中不使用sort对列表排序的技术
91 1
|
8月前
|
Python
Python中sort和sorted函数用法解析
Python中sort和sorted函数用法解析
91 0
|
8月前
|
算法 搜索推荐 Python
python中的堆(Heap)
python中的堆(Heap)
52 0
|
算法 搜索推荐 Python
Python高级数据结构——堆(Heap)
Python高级数据结构——堆(Heap)
210 2