九度OJ 1174:查找第K小数 (排序、查找)

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:6376

解决:2539

题目描述:

查找一个数组的第K小的数,注意同样大小算一样大。 
如  2 1 3 4 5 2 第三小数为3。

输入:

输入有多组数据。
每组输入n,然后输入n个整数(1<=n<=1000),再输入k。

输出:

输出第k小的整数。

样例输入:
6
2 1 3 5 2 2
3
样例输出:
3
来源:
2010年北京邮电大学网院研究生机试真题


思路:

先排序后查找,如果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
", a[i]);
                break;
            }
        }
    }
 
    return 0;
}
/**************************************************************
    Problem: 1174
    User: liangrx06
    Language: C
    Result: Accepted
    Time:10 ms
    Memory:912 kb
****************************************************************/


编程算法爱好者。
原文地址:https://www.cnblogs.com/liangrx06/p/5083853.html