快速排序源代码

#include<iostream>  
using namespace std; 
int a[200001],n; 
void swap(int &a,int &b){ 
	int tmp = a; 
	a = b; 
	b = tmp; 
} 
//int partition(int p,int r){ 
//int rnd = rand()%(r-p+1)+p; 
//swap(a[rnd],a[r]); 
//int pvt = r, i = p-1; 
//for(int j = i+1;j<r;j++) 
//if(a[j]<a[pvt]) 
//swap(a[j],a[++i]); 
//swap(a[++i],a[pvt]); 
//return i; 
//} 

int partition(int l,int r)
{
	int i=l,j=r;    //初始化
	while(i<j)
	{
		while(i<j&&a[i]<a[j]) j--;    //右侧扫描
		if(i<j)
		{
			swap(a[i],a[j]);//将较小记录交换到前面
			i++;
		}
		while(i<j&&a[i]<a[j]) i++;//左侧扫描
		if(i<j)
		{
			swap(a[j],a[i]);//将较大记录交换到后面
			j--;
		}
	}
	return i;   // i位轴值记录的最终位置
}


void qsort(int p,int r){ 
	if(p<r){ 
		int q = partition(p,r); 
		qsort(p,q-1); 
		qsort(q+1,r); 
	} 
} 
int main(){ 
	cout<<"请输入数组的大小:"<<endl;
	cin>>n; 
	cout<<"请输入数组值:"<<endl;
	for(int i=0;i<n;i++) 
	cin>>a[i]; 
	qsort(0,n-1); 
	cout<<"快速排序后的结果是:"<<endl;
	for(int i=0;i<n;i++) 
	cout<<a[i]<<" "; 
	return 0; 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值