快排:
秋招过程中有被问到,但答的不是很好,写出来记录一下。
思想:
一个partition函数,使第一个元素归位。归位:左边比该元素小,右边比该元素大。
一个quick_sort函数,递归调用partition函数,mid,left,right
代码实现:
def quick_sort(li,left,right):
if left < right:
mid = partition(li,left,right) #左 右
partition(li,left,mid-1)
partition(li,mid+1,right)
def partition(li,left,right):
tmp = li[left] #注意
while left < right: # 从右边开始找 是小于
while left < right and li[right] >= tmp: # 从右边找比tmp小的数
right -= 1
li[left] = li[right]
while left < right and li[left] <= tmp: # 等于只有li[left] <= tmp 和 li[right]>= tmp
left += 1
li[right] = li[left]
li[left] = tmp #对称
return left
li = [4,5,6,9,8,3,2,1,7]
quick_sort(li,0,len(li)-1)
print(li)