相同的题在acwing测试点全过,洛谷上一个都运行不起来,谢谢大佬们
#include<iostream>
#include<stdio.h>
#include<string>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int n, k, sj[5000010];
int res;
int findk(int* nums, int l, int r, int k)
{
if (l >= r)
return nums[l];
int partition = nums[l], i = l, j = r;
while (i < j) //等于时会停止进行交换
{
while (nums[j] >= partition&& i < j)
j--;
while (nums[i] <= partition && i < j)
i++;
if (i < j)
{
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
}
int tmp = nums[l];
nums[l] = nums[j];
nums[j] = tmp;
if (j == k)
{
return nums[j];
}
if(j>k)
findk(nums, l, j-1, k);
else
findk(nums, j+1, r, k);
}
int main()
{
cin >> n >> k;
for (int i = 0;i < n;i++)
{
scanf("%d",sj[i]);
}
res=findk(sj, 0, n - 1, k);
cout << res;
}