快速排序QuickSort

分析:
递归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

注意点:

  • 交换逻辑,如果遇到相等数的处理
  • 停止递归的条件
原文地址:https://www.cnblogs.com/sandy-t/p/6940874.html