快排算法:选一个基准值(一般都是第一个元素),按照基准值大小,将数列分成两类,一类呢是左边的比基准值小的,一类是右边的比基准值大的。然后再对左边,右边的子序列分别选基准值,分成两类大小,左边是小于基准值,右边是大于基准值的。
python的实现算法如下:
1左边先比较是否有小于基准值p的,有的话跟右边的i位置的元素交换(跟j交换的i是基准值)。右边比较是否比有比基准值p大的,有的则跟j位置的元素交换(跟i交换的j也是基准值)。
def mySort(arr):
quickSort(arr,0,len(arr)-1)
def quickSort(arr,s,e):
if not arr:
return None
if s>e:
return None
p=arr[s]
i=s
j=e
while i<j:
while i<j and arr[j]>=p:
j-=1
if i<j:
arr[i],arr[j]=arr[j],arr[i]
while i<j and arr[i]<p:
i+=1
if i < j:
arr[i],arr[j]=arr[j],arr[i]
quickSort(arr,s,i-1)
quickSort(arr,i+1,e)
if __name__=="__main__":
test=[5,1,6,2,5]
mySort(test)
print(test)