k小的数
Time Limit: 5000 ms
Memory Limit: 65536 KiB
Problem Description
现有一个包含n个整数(1<=n<=10000000)的无序序列(保证序列内元素各不相同),输入一个整数k(1<=k<=n),请用较快的方式找出该序列的第k小数并输出。
Input
多组输入。
首先输入一个数据组数T(1<=T<=100)
接下来是T组数据。
每组数据有两行。
第一行先输入两个整数,n和k。
接下来是一行输入n个由空格分开的互不相同的整数num(1<=num<=90000000)。
Output
对于每组数据,输出该组数据中第k小的数num。
Sample Input
1 6 4 3 2 5 1 4 6
Sample Output
4
#include <stdio.h> #include <stdlib.h> int a[105]; void sort(int left, int right) { int i, j, temp, t; if(left > right) return ; temp = a[left]; i = left; j = right; while(i != j) { while(a[j] >= temp && i < j) j--; while(a[i] <= temp && i < j) i++; if(i < j) { t = a[i]; a[i] = a[j]; a[j] = t; } } a[left] = a[i]; a[i] = temp; sort(left, i - 1); sort(i + 1, right); return ; } int main() { int T, n, k, i; scanf("%d", &T); while(T--) { scanf("%d%d", &n, &k); for(i = 1; i <= n; i++) { scanf("%d", &a[i]); } sort(1, n); // for(i = 1; i <= n; i++) // printf("%d ", a[i]); 手动检查 排序是否正确 printf("%d\n", a[k]); } system("pause"); return 0; }