求助关于排序
  • 板块灌水区
  • 楼主xiaofu15191
  • 当前回复12
  • 已保存回复12
  • 发布时间2022/9/28 19:48
  • 上次更新2023/10/27 09:37:42
查看原帖
求助关于排序
242317
xiaofu15191楼主2022/9/28 19:48

RT,我同学自己制作了一种排序方法,他说时间复杂度 O(n);代码如下,求Hack(Wa 或 卡成 O(nlogn) or O(n^2) 都行):

#include<cstdio>
#include<climits>
#include<cmath>
#define N 200007
using namespace std;
int n,last[N],next[N],set;
int last1[N],next1[N],em;
unsigned int a[N],e[N],save;
int minn=INT_MAX;
int min(int x,int y)
{
	return x>y?y:x;
} 
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{ 
		scanf("%d",&a[i]); 
		minn=min(minn,a[i]); 
	} 
	if(minn<0) 
		set=-minn;
	for(int i=1;i<=n;i++) a[i]+=set;
	for(int i=1;i<=n;i++)
	{ 
		save=a[i]%N; 
		next[i]=last[save]; 
		last[save]=i; 
	} 
	for(int i=N-1;i>=0;i--)
	{
		for(int j=last[i];j;j=next[j])
		{ 
			save=a[j]/N;
			e[++em]=a[j];
			next1[em]=last1[save];
			last1[save]=em;
		} 
	} 
	for(int i=0;i<N;i++) 
		for(int j=last1[i];j;j=next1[j])
			printf("%u\n",e[j]);
	return 0;
}

2022/9/28 19:48
加载中...