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的位置交换(原地模式,无需新开数组) 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) #只要扫描left+1到right-2即可,Mid3已经可以保证A[lef]t<=pivot<=A[right-1] 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)