快速排序(递归算法)分析

时间:2022-03-28 04:12:55

基于分治策略:把一个问题划分成几个小问题,分别对小问题求解,把答案组合在一起,即为原问题的解

升序:

1>  找出位于待排序序列中间位置的值,赋给mid,把小于mid的值都移动到左半部分,大于mid的值都移动右半部分。

2> 分别递归左半部分和右半部分~·

 

void qsort(int l,int r)
{

int i,j,mid,p;
i=l;j=r;
mid=a[(l+r)/2]; //将当前序列在中间位置的数定义为分隔数
do
{
while (a[i]<mid) {i++;} //在左半部分寻找比中间数大的数
while (a[j]>mid) {j--;} //在右半部分寻找比中间数小的数
if (i<=j)
{ //若找到一组与排序目标不一致的数对则交换它们
p=a[i];a[i]=a[j];a[j]=p;
i++;j--; //继续找
}
}while(i<=j); //注意这里要有等号
if (l<j) qsort(l,j); //若未到两个数的边界,则递归搜索左右区间
if (i<r) qsort(i,r);
}