求教。直接输出函数返回值报错
查看原帖
求教。直接输出函数返回值报错
281721
Pao_Pao_楼主2024/6/18 11:50
#include<iostream>
#include<cstdio>
#define N 5000000
using namespace std;
int num[N+10],k;


int qsort(int l,int r){
	if(l == r){
		return num[l];
	}
	int i = l,j = r,temp,flag;
	flag = num[(l+r)/2];
	do{
		while(num[i]<flag) i++;
		while(num[j]>flag) j--;
		if(i<=j){
			temp = num[i];
			num[i] = num[j];
			num[j] = temp;
			i++;
			j--;
		}
	}while(i<=j);
	if(k<=j){
		qsort(l,j);
	}else if(k>=i){
		qsort(i,r);
	}else{
		return num[i-1];
	} 
}
int main() {
	int n;
	scanf("%d%d",&n,&k);
	for(int i = 0; i<n; i++) {
		scanf("%d",&num[i]);
	}
	cout<<qsort(0,n-1);
	return 0;
}

代码如上,我使用的分治,在找到k之后排序函数返回值,在主函数中输出,测试点3个RE,2个MLE。 在修改为在排序函数中直接输出之后则AC。请问是因为递归调用的原因吗?想知道具体问题。 排序函数修改后代码:

void qsort(int l,int r){
	if(l == r){
		cout<<num[l];
		return;
	}
	int i = l,j = r,temp,flag;
	flag = num[(l+r)/2];
	do{
		while(num[i]<flag) i++;
		while(num[j]>flag) j--;
		if(i<=j){
			temp = num[i];
			num[i] = num[j];
			num[j] = temp;
			i++;
			j--;
		}
	}while(i<=j);
	if(k<=j){
		qsort(l,j);
	}else if(k>=i){
		qsort(i,r);
	}else{
		cout<<num[i-1];
		return;
	} 
}
2024/6/18 11:50
加载中...