求助,为什么快排这个地方用<=能过,但是<不能过?
查看原帖
求助,为什么快排这个地方用<=能过,但是<不能过?
116903
Nobody_Zhang楼主2021/9/10 16:22

AC代码:

#include<bits/stdc++.h>
using namespace std;
int a[5000005],n,k;
void qsort(int l,int r)
{
	if(l==r)
	{
		cout<<a[k]<<endl;
		exit(0);
	}
	int i=l,j=r,tmp=a[l];//相等的时候就直接用if给判出去了
	while(i!=j)
	{//从小到大
		while(a[j]>=tmp&&i<j) j--;
		while(a[i]<=tmp&&i<j) i++;
		swap(a[i],a[j]);
	}
	swap(a[l],a[i]);
	if(i==k){
		cout<<a[i]<<endl;
		exit(0);
	}
	if(i<k){
		qsort(i+1,r);
	}
	if(i>k){
		qsort(l,i-1);
	}
}
int main()
{
	scanf("%d%d",&n,&k);
	//cin>>n>>k;
	for(int i=0;i<n;i++)
		scanf("%d",&a[i]);
		//cin>>a[i];
	random_shuffle(a,a+n);
	qsort(0,n-1);
	return 0;
}

UAC代码:

#include<bits/stdc++.h>
using namespace std;
int a[5000005],n,k;
void qsort(int l,int r)
{
	if(l==r)
	{
		cout<<a[k]<<endl;
		exit(0);
	}
	int i=l,j=r,tmp=a[l];//相等的时候就直接用if给判出去了
	while(i!=j)
	{//从小到大
		while(a[j]>tmp&&i<j) j--;
		while(a[i]<tmp&&i<j) i++;
		swap(a[i],a[j]);
	}
	swap(a[l],a[i]);
	if(i==k){
		cout<<a[i]<<endl;
		exit(0);
	}
	if(i<k){
		qsort(i+1,r);
	}
	if(i>k){
		qsort(l,i-1);
	}
}
int main()
{
	scanf("%d%d",&n,&k);
	//cin>>n>>k;
	for(int i=0;i<n;i++)
		scanf("%d",&a[i]);
		//cin>>a[i];
	random_shuffle(a,a+n);
	qsort(0,n-1);
	return 0;
}

2021/9/10 16:22
加载中...