堆排序算法可以实现O(lgn)时间复杂度的排序,是很优秀的排序算法。
一、最大堆实现降序排列
def heapfy(nums, i, size):
left, right = 2 * i + 1, 2 * i + 2
largest = left if left < size and nums[left] > nums[i] else i
largest = right if right < size and nums[right] > nums[largest] else largest
if largest != i:
nums[largest], nums[i] = nums[i], nums[largest]
heapfy(nums, largest, size)
def heapSort(nums):
size = len(nums)
for i in range(size//2)[::-1]:
heapfy(nums, i, size)
for i in range(size)[::-1]:
nums[0], nums[i] = nums[i], nums[0]
size -= 1
heapfy(nums, 0, size)
return nums
二、最小堆实现升序排列
def heapfy(nums, i, size):
left, right = 2 * i + 1, 2 * i + 2
largest = left if left < size and nums[left] < nums[i] else i
largest = right if right < size and nums[right] < nums[largest] else largest
if largest != i:
nums[largest], nums[i] = nums[i], nums[largest]
heapfy(nums, largest, size)
def heapSort(nums):
size = len(nums)
for i in range(size//2)[::-1]:
heapfy(nums, i, size)
for i in range(size)[::-1]:
nums[0], nums[i] = nums[i], nums[0]
size -= 1
heapfy(nums, 0, size)
return nums





近期评论