这个快速排序算法可能不是效率最高的,但它是最简单的算法之一。
快速排序算法是由C.A.R.Hoare于1962年发明的。对于一个给定的数组,从中选择一个元素,以该元素为界将其与元素划分为两个子集,一个子集中的元素都小于该元素,另一个子集中的元素都大于等于该元素。对这两个子集递归执行这一过程,当某个子集中的元素小于2时,这个子集就不需要再次排序,终止递归。
该算法的C语言实现代码如下:
void qsortlist(int v[],int left,int right){
int i,last;
void swap(int v[],int i,int j);
if(left>=right)
return;
swap(v,left,(left+right)/2);//选定中间元素作为划分两个子集的元素,并将其与替换至数组第一个位置
last=left;//利用last记录两个子集的中间元素的位置,last初始化为数组第一个元素的位置
for(i=left+1;i<=right;i++)//遍历数组每个元素与第一个元素比较
if(v[i] <v[left]){//如果该数组元素小于第一个元素,则将其与last后的元素交换,这样可以保证last之前的元素都小于第一个元素
swap(v,++last,i);//
swap(v,left,last);//将关键元素交换至两个子集的中间,并对两个子集进行递归调用排序
qsortlist(v,left,last-1);
qsortlist(v,last+1,right);
}
void swap(int v[],int i,int j){//交换数组元素值函数
int temp;
temp=v[i];
v[i]=v[j];
v[j]=temp;
}