九度OJ 1174:查找第K小数 (排序、查找)
- 题目描述:
-
查找一个数组的第K小的数,注意同样大小算一样大。
如 2 1 3 4 5 2 第三小数为3。
- 输入:
-
输入有多组数据。
每组输入n,然后输入n个整数(1<=n<=1000),再输入k。
- 输出:
-
输出第k小的整数。
- 样例输入:
-
6 2 1 3 5 2 2 3
- 样例输出:
-
3
思路:
先排序后查找,如果K特别大或小也可以直接查找。
我这个代码是以前写的,没有考虑复杂度。
代码:
#include <stdio.h> #define N 1000 int main(void) { int n, k, i, j; int a[N], tmp; while (scanf("%d", &n) != EOF) { for(i=0; i<n; i++) scanf("%d", &a[i]); scanf("%d", &k); for(i=0; i<n-1; i++) { for(j=0; j<n-1-i; j++) { if (a[j] > a[j+1]) { tmp = a[j]; a[j] = a[j+1]; a[j+1] = tmp; } } } int count = 0; for (i=0; i<n; i++) { if (i>0 && a[i] == a[i-1]) continue; count ++; if (count == k) { printf("%d\n", a[i]); break; } } } return 0; } /************************************************************** Problem: 1174 User: liangrx06 Language: C Result: Accepted Time:10 ms Memory:912 kb ****************************************************************/
编程算法爱好者。