第k个最小元素-此代码有什么问题?

时间:2019-06-18 16:17:33

标签: c

我干了很多遍代码,但是找不到问题。

#include <stdio.h>

int main()
{
    int arr[] = {9,8,5,10,2};
    int i, j, k, small;
    scanf("%d", &k);
    int n=5;
    int asc[k];
    if(k<n)
    {
        for(i=0; i<k; i++)
        {
            small=arr[i];
            for(j=i; j<n; j++)
            {
                if(arr[j]<small)
                {
                    small=arr[j];
                }
            }
            asc[i]=small;
        }
        printf("%d", asc[k-1]);
    }

    return 0;
}

输出应返回第k个最小元素。我还创建了一个数组“ asc”,以便在每次外循环迭代后按升序存储最小的元素。

输出-每次2次

预期-插入小于n的任何值(k)时,它应返回第k个最小元素。

2 个答案:

答案 0 :(得分:2)

如果最小的元素是最后一个元素,将会发生什么?您的情况就是这样:{9,8,5,10,2} 在每次迭代中,您都会找到最小的元素(2)并将其分配给asc的当前元素。结果为asc[] = {2, 2, 2}(由k个相等的元素组成)。

答案 1 :(得分:-1)

伙计们,我是通过简单的排序完成的。我试图在不使用任何排序或任何递归的情况下做到这一点,但是似乎很困难,即使不是不可能。无论如何,谢谢您的帮助!