• python Quicksort demo


    __author__ = 'student'
    
    '''
    quicksort
    step 1, choose one pivot, such as pivot=la[0]
    step 2, scan the data from right side, find data less than pivot, then swap this with pivot
    pivot=1  [4] 5 7 3 20 9 [j]
    then scan from left side, find data greater than pivot, then swap the position j and i
    4 [] 7 3 20 9 5
    when i>=j then finish one loop. then put the pivot in the i;
     all data are dived by pivot now. left is less than pivot and right are greater than pivot.
    think step by step then do it and try something
    step 3. then you have two parts to sort, left part and right part.
    recursive  call this method to sort
    '''
    import random
    
    def quicksort(la,l,r):
        if l>=r :
            return
        left=l;right=r
        pivot=la[left]
        while left < right:
            while left<right and la[right]>pivot:
                right-=1
            if left<right :
                la[left]=la[right]
                left+=1
            while left<right and la[left]<pivot:
                left+=1
            if left<right:
                la[right]=la[left]
        la[left]=pivot
        quicksort(la,l,left-1)
        quicksort(la,left+1,r)
    
    def quicksort2(la):
        if len(la)<=1:
            return la
        return quicksort2([lt for lt in la[1:] if lt<la[0]])+ la[0:1]+quicksort2([ge for ge in la[1:] if ge>=la[0]])
    
    import sys
    sys.setrecursionlimit(999)
    
    la=[]
    def generatenumbers(la,len):
        for x in range(len):
            la.extend([random.randint(1,50)])
    generatenumbers(la,1000)
    print la
    quicksort(la,0,len(la)-1)
    print la
  • 相关阅读:
    NOIP模拟赛 篮球比赛1
    class对象详解
    github如何搜索资料
    c# double 类型保留几位小数
    php项目执行composer install时报错
    承载地图的div如果隐藏再显示,则定位时会定位到页面左上角
    标题过长,用省略号显示
    跳转页面带参数
    日期和时间戳转换
    秒数转换为时分秒
  • 原文地址:https://www.cnblogs.com/huaxiaoyao/p/4489805.html
Copyright © 2020-2023  润新知