https://leetcode-cn.com/problems/smallest-k-lcci/
设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。
示例:
输入: arr = [1,3,5,7,2,4,6,8], k = 4
输出: [1,2,3,4]
思路
考察快速排序的思想
class Solution:def smallestK(self, arr: List[int], k: int) -> List[int]:# 快速排序思想if len(arr) == 0: return []idx = self.partition(arr, 0, len(arr) - 1)if idx == k:return arr[:idx]elif idx < k:return arr[:idx] + self.smallestK(arr[idx:], k - idx)else:# idx > kreturn self.smallestK(arr[:idx], k)def partition(self, array, l, r):pivot = array[r]i = l - 1for j in range(l, r):if array[j] <= pivot:i += 1array[i], array[j] = array[j], array[i]array[i+1], array[r] = array[r], array[i+1]return i+1
快速排序
def quick_sort(array, l, r):if l < r:q = partition(array, l, r)quick_sort(array, l, q - 1)quick_sort(array, q + 1, r)def partition(array, l, r):x = array[r]i = l - 1for j in range(l, r):if array[j] <= x:# 控制升序还是降序i += 1array[i], array[j] = array[j], array[i]array[i + 1], array[r] = array[r], array[i+1]# print(array)return i + 1if __name__ == "__main__":array = [10, 5, 3, 1, 7]quick_sort(array, 0, len(array)-1)print(array)
