快排讲解视频
基本思路: 就是每次一趟排序需要达到一个效果,就是开始排序前选定一个数,排序后,这个数字左边的都比它小或者相等,右边的都比它大或者相等。
达到这个效果后,就可以递归执行了,将该数的左右区间递归执行,最终就可以排好了。
每一趟排序的基本方法:
假定需要排序的区间是[left, right],选定一个数字(key)可以随机也可以选择区间左边第一个数字,设置一个l指针指向区间最左端(=left)和一个r指针(=right),然后开始循环判断,将r指针向左移动,当指向的数字小于key时,停止移动,将l向右移动,当指向的值大于key时停止移动,并将l和r指向的值交换,然后重复前面的操作,直至 l = r时结束。
python代码:
class Solution:
def getLeastNumbers(self, arr: List[int], k: int) -> List[int]:
if k == 0 or arr == []:
return []
def sort(left, right):
if left >= right:
return
l = left
r = right
key = arr[left]
# 进行一次排序:
while l < r:
while r > l and arr[r] >= key:
r -= 1
while l < r and arr[l] <= key:
l += 1
arr[l], arr[r] = arr[r], arr[l]
arr[l], arr[left] = arr[left], arr[l]
# 递归排序
sort(left, l-1)
sort(l + 1, right)
sort(0, len(arr)-1)
return arr