方法一:排序
#include<iostream>
#include<algorithm>
using namespace std;
int FindTheKnum(int* arr, int n, int k)
{
sort(arr, arr + n);
return arr[n-k];
}
int main()
{
const int n = 10;
int arr[n] = { 0 };
int k = 4;
for (int i = 0; i < n; ++i)
{
cin >> arr[i];
}
int kNum = FindTheKnum(arr, n, k);
cout << kNum << endl;
return 0;
}
方法二:利用冒泡排序思想
#include<iostream>
#include<vector>
using namespace std;
int FindTheKnum(int* arr, int n, int k)
{
for (int i = 0; i < k; ++i)
{
for (int j = 0; j < n - i - 1; ++j)
{
if (arr[j] < arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return arr[k-1];
}
int main()
{
const int n = 10;
int arr[n] = { 0 };
for (int i = 0; i < n; ++i)
{
cin >> arr[i];
}
int k = 4;
int kNum = FindTheKnum(arr, n, k);
cout << kNum << endl;
return 0;
}
方法三:优先级队列
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
int FindTheKnum(int* arr, int n, int k)
{
priority_queue<int, vector<int>, greater<int>> p_queue;
for (int i = 0; i < n; ++i)
{
if (i < k)
{
p_queue.push(arr[i]);
}
else
{
if (arr[i] > p_queue.top())
{
p_queue.pop();
p_queue.push(arr[i]);
}
}
}
return p_queue.top();
}
int main()
{
const int n = 10;
int arr[n] = { 0 };
int k = 4;
for (int i = 0; i < n; ++i)
{
cin >> arr[i];
}
int Knum = FindTheKnum(arr, n, k);
cout << Knum << endl;
return 0;
}