【描述】
输入n(0<n≤100)个正整数(无序的),程序在不对n个正整数排序的情况下找出第k大的数。注意,第k大的数意味着从大到小排在第k位置的数。
【输入】
n
k
a1 a2 a3a4 ... an
输出
b
【输入示例】
5
2
32 3 125 89
【输出示例】
32
【提示】
对每一个数,找一找有多少个数比它大,如果有0个数比它大,那它就是第1,如果有1个数比它大,那么它就是第2。如果有k-1个数比它大,那么它就是第k大的。
【C代码】
---------------
#include<stdio.h>
intmain(void) {
int n, k;
int a[100];
int i, j;
int count;
scanf("%d", &n);
scanf("%d", &k);
for(i = 0; i < n; ++i)
scanf("%d", &a[i]);
for(i = 0; i < n; ++i) {
count = 0;
for(j = 0; j < n; ++j) {
if(i != j && a[j] >a[i])
++count;
if(count >=k) /* 已经有多于k个数比a[i]大 */
break;
}
/* 遍历整个数组,正好有k-1个数比a[i]大,所以a[i]就是第K大的数 */
if(j == n && count == k - 1) {
printf("%d\n", a[i]);
break;
}
}
return 0;
}