c - C语言删除数组中多个元素的算法

标签 c arrays algorithm

我正在尝试学习 C,并且正在尝试编写一段代码来执行以下操作:

  1. 接受用户输入的自然数 n
  2. 获取用户输入的 n 个元素并将它们存储在数组 x
  3. 删除数组x中的所有负数
  4. 打印新数组,长度为n - 删除元素的数量

这是我的代码:

#include <stdio.h>
int main(void)
{
    int n, i, count=0;
    double x[1000];
    scanf("%d", &n);

    for (i=0; i<n; i++)
        scanf("%lg", &x[i]);

    for (i=0; i<n; i++)
    {
        if (x[i] < 0)
        {
            count++;
            continue;
        };
        x[i-count]=x[i];
    };

    n -= count;

    for (i=0; i<n; i++)
        printf("%d: %g\n", i, x[i]);
    return 0;
}

有人告诉我应该用以下代码替换我的第二个 for 循环:

    int j=0

...

    for (i=0; i<n; i++)
    {
        if (x[i] < 0)
        {
            count++;
            continue;
        };
        if (i > j)
            x[j] = x[i];
        j++;
    };

谁能解释一下为什么后面的代码更好?

最佳答案

如果 i==j,那么您就是在将一个元素分配给它自己:不是错误,而是(小)浪费精力。

如果你真的想改进这一点,首先要避免将负值放在数组中。

关于c - C语言删除数组中多个元素的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26804057/

相关文章:

c - 了解字符串指针数组

arrays - 将System.UInt16数组转换为字符串

javascript - 线性或 (n log n) 时间复杂度

android - 验证点是否被圈出的算法

algorithm - 尝试在方案中编写超操作

c - C中的指针问题

c - 在解密程序中使用带负数的模数的问题

c - 为什么下面的代码中 ceil 返回 0.000?

c - 如何获得二维数组的总和?

arrays - 过滤器不会迭代数组中的所有元素。为什么?