快速排序的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);