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
     
     
     
  • 相关阅读:
    Nagios经check_http监视web申请书server多个tomcat维修
    一个测试SQL2005数据库连接JSP档
    android 36 线程通信
    android 35 ListView增删改差
    android 34 ListView进阶
    android 33 对话框控件
    android 32 Gallery:横着滚动的列表
    android 31 GridView
    android 30 下拉列表框:ArrayAdapter和Spinner.
    android 29 ArrarAdapter数组适配器
  • 原文地址:https://www.cnblogs.com/wenm1128/p/12095375.html
Copyright © 2011-2022 走看看