Python的堆排序
Python中如何实现堆排序?
Python中可以使用heapq模块实现堆排序。heapq模块提供了heapify和heappop函数用于创建和操作堆。
堆排序的过程如下:
1. 将待排序的列表转换为堆结构,可以使用heapify函数实现。
2. 每次从堆中pop出最小值,并将其加入到已排序的列表中,直到堆结构为空。
下面是一个Python实现堆排序的例子:
“`python
import heapqdef heap_sort(arr):
heapq.heapify(arr) # 将列表转换为堆结构sorted_arr = []
while arr:
sorted_arr.append(heapq.heappop(arr)) # 从堆中pop出最小值加入已排序的列表
return sorted_arr# 示例
arr = [5, 3, 7, 2, 8, 4]
sorted_arr = heap_sort(arr)
print(sorted_arr) # [2, 3, 4, 5, 7, 8]
“`注意,上述实现是基于小根堆的,如果需要实现大根堆排序,可以将堆元素取相反数。例如,对于列表[5, 3, 7, 2, 8, 4],在heapify之前可以执行`arr = [-x for x in arr]`,这样就可以得到大根堆排序的结果[8, 7, 5, 4, 3, 2]。
2023年04月28日 16:40