#include<iostream>
using namespace std;
#define M 1000
int FindKth(int a[M], int left, int right, int n)
{
int tmp, rpos, value, i, j;
if (left == right)
return left;
rpos = rand() % (right - left) + left;
tmp = a[left];
a[left] = a[rpos];
a[rpos] = tmp;
value = a[left];
i = left;
j = right;
while (i < j)
{
while (i < j &&a[j] < value)
j--;
if (i < j)
{
a[i] = a[j];
i++;
}
else
break;
while (i<j && a[i]>value)
i++;
if (i < j)
{
a[j] = a[i];
j--;
}
else
break;
}
a[i] = value;
if (i < n - 1)
return FindKth(a, i + 1, right, n);
if (i>n - 1)
return FindKth(a, left, i - 1, n);
return i;
}
int main()
{
int a[M], n, i, k, num;
cout << "请输入序列中的各个数据: " << endl;
cin >> n;
cout << "请输入需要查找的各个数据: " << endl;
for (i = 0; i < n; i++)
cin >> a[i];
cout << "请输入需要查找的数据的序号K: ";
cin >> k;
num = FindKth(a, 0, n - 1, k);
cout << "序列中第" << k << "大的数为" << a[num] << endl;
return 0;
}
找第k大的数
最新推荐文章于 2022-01-02 20:06:31 发布