快排
```python
def partition(array, l, r):
p = l
for i in range(l+1, r+1):
if array[i] <= array[l]:
p += 1
array[i], array[p] = array[p], array[i]
array[p], array[l] = array[l], array[p]
return p
def quicksort(array, begin=0, end=None):
if end is None:
end = len(array) - 1
def _quicksort(array, begin, end):
if begin >= end:
return
pivot = partition(array, begin, end)
_quicksort(array, begin, pivot-1)
_quicksort(array, pivot+1, end)
return _quicksort(array, begin, end)
```
最小的k个数字
```python
def solution(nums: list, k: int)->list:
def quicksort(l: int, r: int) -> int:
p = l
for i in range(l, r):
if nums[i] <= nums[r]:
nums[p], nums[i] = nums[i], nums[p]
p += 1
nums[p], nums[r] = nums[r], nums[p]
if p > k:
return quicksort(l, p - 1)
elif p < k:
return quicksort(p + 1, r)
else:
return p
quicksort(0, len(nums)-1)
return nums[:k]
if __name__ == '__main__':
nums=[1,3,5,4,2]
res = solution(nums, k=3)
print(res)
```
第k大的数字
```python
class Solution(object):
def findKthLargest(self, nums, k):
k = len(nums) - k
def quickSelect(l, r):
p = l
for i in range(l, r):
if nums[i] <= nums[r]:
nums[p],nums[i] = nums[i],nums[p]
p += 1
nums[p], nums[r] = nums[r], nums[p]
if p > k: return quickSelect(l, p-1)
elif p < k: return quickSelect(p+1, r)
else: return nums[p]
return quickSelect(0, len(nums)-1)
```