A23615. #include<bits/stdc++.h> using namespace std; const int N=1e6+5; int n,k; int nums[N]; int partition(int left,int right){ int pivot=nums[right]; int i=left-1; for(int j=left;j<right;j++){ if(nums[j]<p…
判断题
较易
知识点
题目描述
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int n,k;
int nums[N];
int partition(int left,int right){
int pivot=nums[right];
int i=left-1;
for(int j=left;j<right;j++){
if(nums[j]<pivot){
i++;
swap(nums[i],nums[j]);
}
}
swap(nums[i+1],nums[right]);
return i+1;
}
int quickSelect(int left, int right, int k) {
if (left == right) {
return nums[left];
}
int pivotIndex = partition(left, right);
if (k == pivotIndex) {
return nums[k];
} else if (k < pivotIndex) {
return quickSelect(left, pivotIndex - 1, k);
} else {
return quickSelect(pivotIndex + 1, right, k);
}
}
int main() {
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>nums[i];
int ans=quickSelect(1, n, k);
cout<<ans<<endl;
return 0;
}
保证输入的n不超过10 6 ^6 6,k不超过n,且 (1 ≤ \leq≤ ai_i i≤ \leq≤ 10 9 ^9 9)。完成下面的题目。上述代码正确运行后,可以将num数组按从小到大的顺序排序。( )
选项(单选)
答案解析
详细答案解析为会员权益,按每日次数查看。
开通 / 升级会员
上一题
下一题