快速排序的Python代码实现

选择一个数,和它后面的数比较,把比它小的放在它的左边,大的在右边(位置可能会因为左边元素的添加而右移)

def quick_sort(arr):
    if arr==[]:
        return[]
    else:
        first=arr[0]
        left=quick_sort([l for l in arr[1:]if l<first])
        right=quick_sort([r for r in arr[1:]if r>=first])
        return left+[first]+right 
    
arr=[3,1,15,4,30,23,2]
result_list=quick_sort(arr)
print(result_list)

通过在参数处进行分左分右的操作,进行迭代,会出现在arr[0]两边不断分裂,每一新部分有自己那部分的arr[0],不断分左分右,最终由各部分的return整合起来

其中,不好理解的是:

arr=[3,1,15,4,30,23,2]
a=[i for i in arr[1:]if i<18]

我认为就是下面代码的意思

arr=[3,1,15,4,30,23,2]
a=[]
for i in arr[1:]:
    if i<18:
        a+=[i]

P.S.刚才知道了这种方法叫“分治法”,附一个链接
五大常用算法:分治、动态规划、贪心、回溯和分支界定

posted @ 2019-09-17 22:38  中庭之园  阅读(1507)  评论(0)    收藏  举报