纯C,90分WA直接选择算法求调
查看原帖
纯C,90分WA直接选择算法求调
726870
Rainber楼主2024/11/12 20:35

寄录

int ls[10000];
char status[30000];
void swap(int *a,int *b)
{
	int c=*a;
	*a=*b;
	*b=c;
}
int directSelect(int l,int r,int k)
{
	if(l==r)
	{
		return ls[l];
	}
	int *pivot,*p,*q,*left,*right;
	pivot=ls+l;
	p=ls+l+1;
	q=ls+r;
	left=ls+l;
	right=ls+r;
	while(p<q)
	{
		while(*p<=*pivot&&p<q)
		{
			p++;
		}
		while(*q>=*pivot&&p<q)
		{
			q--;
		}
		swap(p,q);
	}
	p--;
	swap(p,pivot);
	if(p-left+1==k)
	{
		return *p;
	}
	else if(p-left+1<k)//search right
	{
		return directSelect(p-ls+1,r,k+left-p-1);
	}
	else//search left
	{
		return directSelect(l,p-ls-1,k);
	}
}
int main()
{
//	freopen("P1138_10.in","w",stdin);
	int n,k,i,j;
	scanf("%d%d",&n,&k);
	j=0;
	for(i=0;i<n;++i)
	{
		scanf("%d",ls+j);
		if(!ls[j][status])
		{
			ls[j][status]=1;
			j++;
		}
	}
	if(k>j)
	{
		printf("NO RESULT");
	}
	else
	{
		printf("%d",directSelect(0,j-1,k));
	}
	return 0;
}
2024/11/12 20:35
加载中...