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

标签 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 个最小的元素。

最佳答案

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

关于c - 第 k 个最小元素 - 这段代码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56653290/

相关文章:

c - 评估后左值不指定对象?

c++ - 如何解决在 opencv 中显示空图像的问题?

c - 执行需要 ext lib 的 C 脚本

python - Cython 编译器错误

php - PHP 中的 EVP_BytesToKey 实现

c - C 中传递给函数的结构体数组

c - 阻止 Tic Tac Toe 覆盖 C 中的 Action

c - longjmp 是如何工作的?

c++ - 我们如何添加备用节点数据?

C 位移奇数结果超过 15 位移位向左