Quick Select
说明
Quick Select是由quick sort而来,只是它只用了quick sort前面的partition的部分
Average Case O(n)
Worst Case O(n^2)
模板思路
每次选取一个Pivot,可以选第一个
两个variable, 一个存比pivot小的数的数量left
,一个存比pivot大的数的数量right
初始化(两个指针指向的都是下一个对应的数应该放的地方)
left=0
从头开始right = length-1
从尾部开始
pointer
从0开始,遇到right结束,后面的肯定逗比pivot大
while pivot <= right:
#因为right指向的是比Pivot大的数下一个可以存放的地方,所以应该用<=
if nums[pivot] < pivot:
swap(nums, pointer, left)
pointer += 1 #这里Pointer可以加1,因为left <= pointer这是肯定的,所以前面换过来的数必然<= pivot, 不向前就会死循环
left += 1
elif nums[pivot] == pivot:
pointer += 1
else:
swap(nums, pointer, right)
right -= 1
#这里的pointer不能加1,因为不确定后面换过来的数的大小,所以要再次判断