Python写个堆排序
时间: 2023-09-17 18:06:16 浏览: 112
Python实现堆排序的方法详解
5星 · 资源好评率100%
### 回答1:
好的,以下是Python实现堆排序的代码:
```
def heapify(arr, n, i):
largest = i
l = 2 * i + 1
r = 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)
arr = [ 12, 11, 13, 5, 6, 7]
heapSort(arr)
n = len(arr)
print("排序后的数组:")
for i in range(n):
print("%d" % arr[i])
```
这是一个基本的堆排序实现,首先通过`heapify()`函数将数组转换为一个最大堆,然后不断从堆顶取出最大元素并放到已排序的数组的末尾,最终得到一个升序排列的数组。
### 回答2:
堆排序是一种常用的排序算法,它基于二叉堆数据结构。Python提供了heapq模块,其中包含了堆排序的实现。
首先,我们需要导入heapq模块,并定义一个待排序的列表。
import heapq
def heap_sort(arr):
# 使用heapify函数将列表arr转换为一个最小堆
heapq.heapify(arr)
# 创建一个空列表,用于存储排序后的结果
sorted_arr = []
# 使用heappop函数逐个弹出堆中的最小值,并将其加入到排序后的结果列表中
while arr:
sorted_arr.append(heapq.heappop(arr))
return sorted_arr
arr = [6, 3, 8, 2, 1, 9]
print("排序前:", arr)
print("排序后:", heap_sort(arr))
运行上述代码,我们可以得到排序前的列表arr和经过堆排序后的排序结果。
输出结果:
排序前: [6, 3, 8, 2, 1, 9]
排序后: [1, 2, 3, 6, 8, 9]
堆排序的思想是先将待排序的列表转化为一个最小堆,然后逐个从堆中弹出最小值,将其放入排序结果列表中,直到堆为空。堆的创建和弹出最小值的过程都是通过heapq模块中的函数实现的。使用堆排序算法可以快速有效地对列表进行排序。
### 回答3:
堆排序是一种基于二叉堆的排序算法,使用数据结构中的堆进行排序。在Python中,我们可以通过使用heapq模块来实现堆排序。
堆排序的步骤如下:
1. 创建一个空的堆数组。
2. 将输入的无序数组转换为一个最小堆(heapify操作)。可以使用heapq.heapify()函数来实现此操作。
3. 通过不断地从堆中取出最小值,并将其放入一个新的有序数组中,实现排序操作。可以使用heapq.heappop()函数来取出最小值。
4. 重复步骤3,直到堆为空。
下面是一个使用Python实现堆排序的示例代码:
import heapq
def heap_sort(arr):
# 将输入的数组转换为最小堆
heapq.heapify(arr)
# 创建一个空数组来存储排序后的元素
sorted_arr = []
# 从堆中依次取出最小值,并将其添加到有序数组中
while arr:
sorted_arr.append(heapq.heappop(arr))
return sorted_arr
# 测试示例
arr = [4, 2, 7, 1, 9, 5, 6]
sorted_arr = heap_sort(arr)
print(sorted_arr)
运行以上代码,会输出[1,2,4,5,6,7,9],表示堆排序已成功地对输入的无序数组进行了排序。
阅读全文