zoukankan      html  css  js  c++  java
  • 快排

    '''
    快排的核心:使用递归
    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
     
     
     
  • 相关阅读:
    【Java基础】static关键字相关
    【Java基础】foreach循环
    【Java基础】可变参数
    Android的启动模式(下)
    Android的启动模式(上)
    Universal-Image-Loader完全解析(下)
    Universal-Image-Loader完全解析(上)
    布局优化之ViewStub、Include、merge使用分析
    人在千锋--网络学习之开发项目爱限免
    4_2网络学习第二天--XML解析
  • 原文地址:https://www.cnblogs.com/wenm1128/p/12095375.html
Copyright © 2011-2022 走看看