分析:
递归3要点:
1、子问题是什么?子问题输入?子问题输出?
2、返回条件是什么?
3、当前层要做什么?
子问题:分治思想,不断缩小问题规模。
返回条件:问题规模减小到0
当前层:要找到一个元素,使左边的元素比它大,右边的元素比它小。
由于原问题的输入参数没有位置参数,所以需要编写帮助函数,传入子问题需要处理的起始位置。
def quicksort(num_list):
def partition(arr,left,right):
if left>=right:
return
flag=arr[left]
i,j=left,right
while i<j:
if arr[i]<flag:
i+=1
elif arr[j]>flag:
j-=1
else:
if arr[i]==arr[j]:
i+=1
else:
arr[i],arr[j]=arr[j],arr[i]
partition(arr,left,i-1)
partition(arr,i+1,right)
tmp_num_list=num_list[:]
partition(tmp_num_list,0,len(num_list)-1)
return tmp_num_list
注意点:
- 交换逻辑,如果遇到相等数的处理
- 停止递归的条件