快速排序

来源:互联网 发布:python 爬虫 url去重 编辑:程序博客网 时间:2024/06/15 01:05

   最近刷题过程中经常碰到题中有排序的要求,为了偷懒往往采用c++中STL函数的sort()函数排序,该函数实现方法主要是采用快速排序,时间复杂度一般为O(nlogn),根据排序量和阈值结合了插入排序和堆排序。这里主要是学习快速排序的思想顺便学习代码的实现。

   快速排序主要的思想如下:

   假设A为待排序数据,i为起始值,j为终值。

  1、假如A为空或者只有一个数值,直接返回。

  2、就像二分插入排序一样,我们也可以取一个中轴值,设为k,k = A[(i+j)/2];

  3、排序过程中要求k的左边全部小于k,k的右边全部大于k。

  4、递归第3步。

   这里附上一张动态的排序图:


  实现代码如下:

 

void quick(int *a,int i,int j) 

{

int m,n,temp;

int k;

m=i;

n=j;

k=a[(i+j)/2]; /*选取的参照*/

do {

while(a[m]<k&&m<j) m++; /* 从左到右找比k大的元素*/

while(a[n]>k&&n>i) n--; /* 从右到左找比k小的元素*/

if(m<=n) { /*若两者没有交叉*/

temp=a[m];

a[m]=a[n];

a[n]=temp;

m++;

n--;

}

}while(m<=n);

if(m<j) quick(a,m,j); /*运用递归*/

if(n>i) quick(a,i,n);

}
若是想了解STL函数中sort()是如何实现,可以参考下面链接:http://www.cnblogs.com/fengcc/p/5256337.html

  

原创粉丝点击