快速排序


快速排序的python实现


1
def part(arr,i,j): 2 key=arr[i] 3 while i<j: 4 while( i<j and arr[j]>=key): 5 j-=1 6 if arr[j]<key: 7 arr[i]=arr[j] 8 i+=1 9 while (i<j and arr[i]<=key): 10 i+=1 11 if arr[j]>key: 12 arr[j]=arr[i] 13 j-=1 14 arr[i]=key 15 return i 16 def qsort(arr,i,j): 17 div=part(arr,i,j) 18 if i<j: 19 qsort(arr,i,div-1) 20 qsort(arr,div+1,j) 21 a=[11,23,4,1,4,5,767,21] 22 qsort(a,0,len(a)-1) 23 print a

http://www.cyrec.org/posts/quick-sort

更多的参考

def qsort(arr,start,end):
    l,r = start,end #l,r相当于左右指针
    base = arr[start] #确定比较的对象
    while l < r: 
        while( l < r and arr[r] >= base ):
            r-=1
        if(arr[r] < base):
            arr[l],arr[r] = arr[r],arr[l]
        else:
            break
        while( l < r and arr[l] <= base ):
            l += 1
        if(arr[l] > base):
            arr[l],arr[r] = arr[r],arr[l]
        else:
            break
    if(l-1) > start:
        qsort(arr,start,l-1)
    if(r+1) < end:
        qsort(arr,r+1,end)
def quickSort(arr):
    if(len(arr) > 1):
        qsort(arr,0,len(arr)-1)
a = [23,1,32,21,10,2,4,5,7,6,8,3,14,24,62,12,13]
quickSort(a);
print a;

 

不知为何老是

list outof range,烦死

 

还有一种三行的快排,暂时看不懂

http://xpython07.duapp.com/coding/code_snippet

def quick_sort(sort_list):  
     if len(sort_list)<=1:  
         return sort_list  
     return quick_sort([lt for lt in sort_list[1:] if lt<sort_list[0]]) + \
            #这里使用了列表推导式,列表切片和递归返回list中比第一个数小的列表构成左边的列表
            sort_list[0:1] + \
            #这是第一个数放在左列表和右列表的中间
            #之所以使用sort_list[0:1]而不是sort_list[0]是因为sort_list[0:1]返回的是列表,
            #而sort_list[0]返回的是数字,这里是列表相加
            quick_sort([ge for ge in sort_list[1:] if ge>=sort_list[0]])
            #这里与左列表同理
a = [23,1,32,21,10,2,4,5,7,6,8,3,14,24,62,12,13]
print quick_sort(a);

 

posted @ 2013-08-27 15:55  夜雨阑珊  阅读(215)  评论(0编辑  收藏  举报