使用递归的快速排序算法

来源:互联网 发布:大数据研发工程师笔试 编辑:程序博客网 时间:2024/05/16 08:02

快速排序算法是C.A.R.Hoare于1962年发明

#include<stdio.h>

//使用递归的快速排序算法
//对于给定的数组,从中选择一个元素,以该元素为界将其余元素划分为两个子集,一个子集中的所有元素都小于该元素,另一个子集中的所有元素都大于或等于该元素。
//对这样的两个子集递归执行这个过程,当某个子集中的元素数小于2时,这个子集就不需要再次排序,终止递归。
void qsort(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); //取中间元素作为划分子集的参考数,首先存储参考数于v[0]
last=left;
for(i=left+1;i<=right;++i)  //划分子集
{
if(v[i]<v[left])
swap(v,++last,i);
}
swap(v,left,last);  //恢复划分子集的元素
qsort(v,left,last-1);
qsort(v,last+1,right);
}


void swap(int v[],int i, int j)
{
int temp;
temp=v[i];
v[i]=v[j];
v[j]=temp;
}

以序列 4 8 6 3 7 9 为例

left =0, right=5,last=0,

将待比较对象移到数组最左端

6 8 4 3 7 9

然后对每个数组其他数据 与对比数据比较

6 8 4 3 7 9

6 4 8 3 7 9

6 4 3 8 7 9

3 4 6 8 7 9

然后对 3 4 和8 7 9 分别进行递归

得排序结果