快排60分,第三第四点超时,不知道是哪里效率低了,求救QAQ
查看原帖
快排60分,第三第四点超时,不知道是哪里效率低了,求救QAQ
497933
wucr12楼主2023/11/14 18:52
#include<iostream>
#include<cstdio>
#include <bits/stdc++.h>

using namespace std;
int a[100001],b[100001],c[100001],d[100001];
void qsort(int left,int right)
{
	if((right-left)<1) return;
	int m=a[left];
//	int m=rand()%(right-left+1)+left;
	int l,r,t;l=0;r=0;t=0;
	for(int i=left;i<=right;i++)
	{
		if(a[i]<m)
		{
			l++;b[l]=a[i];
		}
		else if(a[i]==m)
		{
			t++;c[t]=a[i];
		}
		else
		{
			r++;d[r]=a[i];
		}
	}
	for(int i=left;i<=left+l-1;i++)	a[i]=b[i-left+1];
	for(int i=left+l;i<=left+l+t-1;i++)	a[i]=c[i-left-l+1];
	for(int i=left+l+t;i<=left+l+t+r-1;i++)	a[i]=d[i-left-l-t+1];
	qsort(left,left+l-1);qsort(left+l+t,left+l+t+r-1);
}
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
	}
	qsort(1,n);
	for(int i=1;i<=n;i++)
	{
		cout<<a[i]<<" ";
	}
	return 0;
}
2023/11/14 18:52
加载中...