1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| def heapify(arr, n, i): """ 这个函数用于维护最大堆的性质。 参数: arr -- 目标数组 n -- 堆的大小 i -- 根节点的索引 """ largest = i left = 2 * i + 1 right = 2 * i + 2
if left < n and arr[left] > arr[largest]: largest = left
if right < n and arr[right] > arr[largest]: largest = right
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
if __name__ == "__main__": sample_array = [50, 16, 48, 8, 12, 35, 21] print("原始数组:", sample_array) sorted_array = heap_sort(sample_array.copy()) print("排序后的数组:", sorted_array)
another_array = [10, 80, 30, 90, 40, 50, 70] print("\n原始数组:", another_array) sorted_array = heap_sort(another_array.copy()) print("排序后的数组:", sorted_array)
|