萌新求助,40分超时后三个点,初次接触快排,如何优化?
查看原帖
萌新求助,40分超时后三个点,初次接触快排,如何优化?
282624
Alexia_Cosecant楼主2020/11/11 20:24
#include<iostream>
#include<cstdlib>
#include<cstdio>
using namespace std;
int a[100001],p;
void qsort(int a[],int x,int y){
	if(x>=y)
	return;
	if(x<y){
		int i,j;
		int t=rand()%(y-x+1)+x;
		i=x;
		j=y;
		int temp=a[x];
		do{
		while(a[j]>=temp&&i<j) j--;
		if(i<j){
			p=a[i];
			a[i]=a[j];
			a[j]=p;
			i++;
		}
		while(a[i]<=temp&&i<j) i++;
		if(i<j){
			p=a[j];
			a[j]=a[i];
			a[i]=p;
			j--;
		}
	}while(i<j);
	qsort(a,x,i-1);
	qsort(a,j+1,y);
	} 
}
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	scanf("%d",&a[i]);
	qsort(a,1,n);
	for(int i=1;i<=n;i++)
	printf("%d ",a[i]);
}
2020/11/11 20:24
加载中...