zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    团队作业2
    神琪宝贝
    自我介绍
    新博客破蛋日!
    关于mysql的索引原理与慢查询优化
    mysql主从复制(超简单)
    MySQL 主从复制与读写分离概念及架构分析
    nginx配置image_filter生成缩略图
    关于ueditor多图上传加水印
    linux下php调用root权限实现方案
  • 原文地址:https://www.cnblogs.com/huaxiaoyao/p/4489805.html
Copyright © 2011-2022 走看看