python原地快排

快排简述:.......
原里图解:.......
#
计算主元,三数取中 def Mid3(A,left,right): #left,right=0,len(A)-1 center=(left+right)//2 if A[left]>A[center]: A[left],A[center]=A[center],A[left] if A[left]>A[right]: A[left],A[right]=A[right],A[left] if A[center]>A[right]: A[center],A[right]=A[right],A[center] #主元和right-1的位置交换,只要扫描left+1到right-2即可,(原地模式,无需新开数组) A[center],A[right-1]=A[right-1],A[center] return A[right-1] #分区 def quicksort(A,left,right): if left<right: pivot=Mid3(A,left,right) i=left+1 j=right-2 while(1): while(A[i]<pivot): i=i+1 while(A[j]>pivot): j=j-1 if i<j: A[i],A[j]=A[j],A[i] i=i+1 j=j-1 else: break #把pivot放到最终的位置上 A[i],A[right-1]=A[right-1],A[i] quicksort(A,left,i-1) quicksort(A,i+1,right) #封装接口 def quick_sort(A): left,right=0,len(A)-1 quicksort(A,left,right) #测试 A=[9,8,7,6,5,4,3,2,1] quick_sort(A) print(A)

猜你喜欢

转载自www.cnblogs.com/jiage666/p/9766295.html