python实现的堆排序算法代码
python实现的堆排序算法代码,以下使用两种不同的方式实现了堆排序算法
""" 作者:皮蛋编程(https://www.pidancode.com) 创建日期:2022/3/21 功能描述:python实现的堆排序算法代码 """ # 方法1 def heapSort(a): def sift(start, count): root = start while root * 2 + 1 < count: child = root * 2 + 1 if child < count - 1 and a[child] < a[child + 1]: child += 1 if a[root] < a[child]: a[root], a[child] = a[child], a[root] root = child else: return count = len(a) start = int(count / 2) - 1 end = count - 1 while start >= 0: sift(start, count) start -= 1 while end > 0: a[end], a[0] = a[0], a[end] sift(0, end) end -= 1 a = [-8, 0, 1, 3, 11, 35, 68] heapSort(a) print(a)
输出结果:[-8, 0, 1, 3, 11, 35, 68]
# 方法2 def heapsort(a): def swap(a, i, j): tmp = a[i] a[i] = a[j] a[j] = tmp def siftdown(a, i, size): l = 2 * i + 1 r = 2 * i + 2 largest = i if l <= size - 1 and a[l] > a[i]: largest = l if r <= size - 1 and a[r] > a[largest]: largest = r if largest != i: swap(a, i, largest) siftdown(a, largest, size) def heapify(a, size): p = (size / 2) - 1 while p >= 0: siftdown(a, p, size) p -= 1 size = len(a) heapify(a, size) end = size - 1 while (end > 0): swap(a, 0, end) siftdown(a, 0, end) end -= 1 a = [-8, 0, 1, 3, 11, 35, 68] heapSort(a)
输出结果:
[-8, 0, 1, 3, 11, 35, 68]
以上代码在Python3.9环境测试通过
相关文章