快速排序
快速排序是一种常见的排序算法,在平均状况下,排列n个元素要进行O(nlogn)次比较,最坏情况需要O(n^2)次比较;但是这种情况并不常见,而且快排相对于其他O(nlogn)排序算法也很快,因为它的内部循环可以在大部分的架构上很有效率地被实现出来。
基于分治策略将一个待排序列分成两个序列,其步骤:
- 从序列中选择一个元素作为基准
- 把基准大的元素放到序列的一侧,比基准小的元素放到序列的另一侧,这称为分区
- 对于每个分区,递归的执行1,2步骤,结束条件为是序列的大小为0,1
除此之外,快速排序算法是一个不稳定算法,例如:
{ 1, 3, 4, 2, 8, 9, 8, 7, 5 },基准元素是5,一次划分操作后5要和第一个8进行交换,从而改变了两个元素8的相对次序。
def QuickSort(citations,left,right):
i=left
j=right
base=citations[right]
if(i>=j):
return
while(i<j):
while(citations[i]>=base and i<j):
i+=1
while(citations[j]<=base and i<j):
j-=1
if (i<j):
temp=citations[i]
citations[i]=citations[j]
citations[j]=temp
citations[right]=citations[i]
citations[i]=base
QuickSort(citations,left,i-1)
QuickSort(citations,i+1,right)