用python写一个堆排序
时间: 2024-05-02 08:19:24 浏览: 49
堆排序是一种基于堆的排序算法,它的时间复杂度为O(nlogn)。下面是用Python实现堆排序的代码:
```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 heap_sort(arr):
n = len(arr)
for i in range(n // 2 - 1, -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
arr = [12, 11, 13, 5, 6, 7]
print(heap_sort(arr))
```
在这段代码中,`heapify`函数用来构建最大堆,`heap_sort`函数用来排序。首先,`heap_sort`函数调用`heapify`函数来构建最大堆。然后,它从最后一个元素开始,将其与堆顶元素交换,并重新构建最大堆。最后,返回已排序的数组。
阅读全文