60分,前两个tle,求大佬帮助!!
查看原帖
60分,前两个tle,求大佬帮助!!
922528
jeamark_233楼主2023/4/5 12:16
#include <bits/stdc++.h>
using namespace std;
int a[5000001],k,temp,num;
void qs(int i,int j)
{
	int left,right;
	left=i;
	right=j;
	if(i==j&&j==k&&i==k)
	{
		num=a[i];
		return;
	}
	int flag=(i+j)/2;
	num=a[flag];
	while(i!=j)
	{
		while(a[j]>num&&j>i)
		{
			j--;
		}
		while(a[i]<num&&i<j)
		{
			i++;
		}
		temp=a[i];
		a[i]=a[j];
		a[j]=temp;
	}
	if(i==k)
	{
		return;
	}
	else if(i<k)
	{
		qs(i+1,right);
	}
	else if(i>k)
	{
		qs(left,i-1);
	}
	return;
}
int main()
{
	int n;
	scanf("%d%d",&n,&k);
	k=k+1;
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
	}
	qs(1,n);
	printf("%d",a[k]);
}
2023/4/5 12:16
加载中...