堆排序实现最小k个数
class Solution: # 小根堆调整函数,静态方法 @staticmethod def heapAdjust(lis, i, end): j = 2*i + 1 # 根节点的左孩子的下标 while j <= end: # 左孩子存在 if j+1 <= end and lis[j+1] < lis[j]: # 右孩子存在,且小于左孩子,j指向右孩子 j += 1 if lis[i] > lis[j]: # 父大于子,交换 lis[i], lis[j] = lis[j], lis[i] i = j j = 2*i + 1 else: break # 建小根堆函数 def heaplify(self, lis): length = len(lis) for i in range((length-1-1)//2, -1, -1):# 逆向遍历所有非叶子节点 self.heapAdjust(lis, i, length-1) def GetLeastNumbers_Solution(self , input: List[int], k: int) -> List[int]: if not k:return [] self.heaplify(input) for i in range(1, k+1): input[0], input[-i] = input[-i], input[0] self.heapAdjust(input, 0, len(input)-i-1) return input[-k:]