鸽手洛谷修炼题精选2——快速排序(C++)

题目描述:
利用快速排序算法将读入的N个数从小到大排序后输出。(题目非原创,题目提供者——洛谷)
输入格式:
第一行为一个正整数N,第二行包括N个空格隔开的正整数ai,为你需要进行排序的数,数据保证了ai不超过1000000000。

****输出格式N个数从小到大输出,数之间空格隔开,行末换行无空格。
思路:

快速排序算法:
void QuickSort(DataType a[],int low,int high )
//用递归的方法对a[low]–a[high]进行快速排序
{ int i =low,j=high;
DataType temp =a[low];//取第一个元素为标准数据元素
while(i<j){
while(i<j&&temp.key<=a[j].key)j–;//在数组的右端扫描
if(i<j){
a[i]=a[j];
i++;
}
while(i<j&&a[i].key<temp.key)i++;//在数组左端扫描
if(i<j){
a[j]=a[i];
j–;
}}}
a[i]=temp;
if(low <i)QuickSort(a,low,i-1);//对左端子集合进行递归
if(i<high)QuickSort(a,j+1,high);}//对右端子集合进行递归
代码
#include//常规头文件,必会三句之一
using namespace std;
int n,a[1000001];//设置成全局变量方便函数和主函数内使用
void QuickSort(int low,int high)//虽然说是随便取一个做temp,但是我们直接用中间就行了
{
int mid=a[(low+high)/2];//中间数
int i=low,j=high;
do{
while(a[i]<mid) i++;//查找左半部分比temp大的数
while(a[j]>mid) j–;//查找右半部分比temp小的数
if(i<=j)//如果有一组不满足排序条件(左小右大)的数
{
swap(a[i],a[j]);//交换
i++;
j–;
}
}while(i<=j);//等于不能掉
if(low<j) QuickSort(low,j);//递归搜索左半部分
if(i<high) QuickSort(i,high);//递归搜索右半部分
}

int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
QuickSort(1,n);
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值