分治算法——快速排序

7.1快速排序
#include
using namespace std;
void qsort(int,int);
int a[100];

void qsort(int l,int r) //自定义快速排序程序
{
int i,j,mid,p;
i=l;j=r;
mid=(l+r)/2; //当前序列的中间位置的数为中间数
do
{
while(a[i]<a[mid]) i++; //在左半部分寻找比中间数大的数
while(a[j]>a[mid]) j–; //在右半部分寻找比中间数小的数
if (i<=j)
{
int 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); //若未到右边界,则递归搜索右区间,继续二分排序
}

int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++) //输入一组待排序的数
cin>>a[i];
qsort(1,n); //快速排序
for(int i=1;i<=n;i++) //输出排序结果
cout<<a[i]<<" ";
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值