快速排序是基于分治策略的排序算法,对于一个给定的数组a[l,r],其按三个步骤进行排序:
1. 分解:以a[l]为基准元素将数组a分成三段a[l,q-1],a[q],a[q+1,r],其中a[l,q-1]中元素都比a[p]小,a[q]等于a[p],a[q+1,r]元素都比a[p]大;其中排序时以通常以a[l]为基准元素,值为key,令low = l , high = r,然后令high–,直到找到比key小的元素,此时该元素位置是high, 将该元素赋值给a[l];接着令low++,直到找到比key大的元素,此时该元素位置是low,将该元素赋值给之前的a[high],然后将key赋值给a[low],循环,直到low>=high;
2. 递归:递归调用快速排序算法对a[l,q+1]和p[q+1,r]进行排序;
3. 合并
# coding:utf-8
#分解
def partition(a,l,r):
key = a[l]
low = l
high = r
while low < high :
while (low < high) and a[high] >= key:
high = high - 1
a[low] = a[high]
while (low < high) and (a[low] <= key):
low = low + 1
a[high] = a[low]
a[low] = key
return low
#递归
def quicksort(a,l,r):
if l < r:
p = partition(a,l,r)
quicksort(a,l,p-1)
quicksort(a,p+1,r)
return a
#测试集
s = [5,4,8,6,2,14,8,15,1,54,2]
print("before sort:",s)
s1 = quicksort(s, l = 0, r = len(s) - 1)
print("after sort:",s1)