堆排序

步骤

  1. 建堆
  2. 挨个出数

代码

# 调整函数
def shift(lst, low, high):
	i = low
	j = 2 * i + 1
	# 出来到数
	tmp = lst[low]
	# 只要有数
	while j <= high:
		# 如果右边孩子存在并且比较大
		if j + 1 <= high and lst[j + 1] > lst[j]:
			# 切换到右边
			j += 1

		# 如果当前到数大于出来到数
		if lst[j] > tmp:
			# 当前到数放到上面去
			lst[i] = lst[j]
			# 往下层走,再循环去比较
			i = j
			j = 2 * i + 1
		else:
			# 出来到数找到了合适到位置 i
			break

	# 把出来到数在空位上
	lst[i] = tmp


def heap_sort(lst):
	# 建堆
	n = len(lst)
	for i in range(n // 2 - 1, -1, -1):
		shift(lst, i, n - 1)

	# print(lst)
	# 挨个出数
	for i in range(n - 1, -1, -1):
		lst[0], lst[i] = lst[i], lst[0]
		shift(lst, 0, i - 1)

	print(lst)

lst = [i for i in range(100)]
heap_sort(lst)
posted @ 2023-03-14 23:57  gz_xiaohai  阅读(16)  评论(0)    收藏  举报