'''
快排的核心:使用递归
s=[3,2,1,4,5,0]
①选定坐标为0的元素作为基准元素:[3]
    声明两个空列表,left=[],right=[]
    将列表中除了s[0]之外的元素,分别与s[0]比较大小
    小了,则放到left里面,大了则放到right里面
    第一次拆分的结果:
    [2,1,0]+[3]+[4,5]
②继续按照上面的逻辑拆分[2,1,0]和[4,5]
③[2,1,0]列表中选定坐标为0的元素:2
   第二次拆分结果:
   [1,0]+[2]+[]
④[1,0]列表中选定坐标为0的元素:1
   第三次拆分结果:
   [0]+[1]+[]
⑤继续以同样的逻辑拆分右边的列表[4,5]
    [4,5]列表中选定坐标为0的元素:4
    第四次拆分结果:
    []+[4]+[5]
⑥全部拆分完之后开始回溯:
最终拆分后展现的结果:
                       [3,2,1,4,5,0]
                    [2,1,0]+[3]+[4,5]
        [0]+[1]+[]+[2]+[]+[3]+[]+[4]+[5]
'''
 
 
 
 
#代码实现
arr=[3,2,1,4,5,0]
def quick_sort(arr):
    print(arr)
    #结束递归的条件:
    #当列表是空或者包含一个元素,就结束递归了
    if len(arr)<=1:
        return arr

    piovt = arr[0]
    left = [] #小于pivot的元素,放到这里
    right = [] #大于pivot的元素,放到这里

    for i in arr[1:]:
        if i <piovt:
            left.append(i)
        elif i > piovt:
            right.append(i)
    return quick_sort(left)+[piovt]+quick_sort(right)


print(quick_sort(arr))

执行结果:

E:\pytest>py -3 qucik_sort.py
[0, 1, 2, 3, 4, 5]

 
 
 
#时间复杂度:nlog2n
一个for循环的复杂度是n
递归的时间复杂度是log2n
 
 
 
posted on 2019-12-25 10:45  腿短毛不多  阅读(124)  评论(0编辑  收藏  举报