在C中删除数组中多个元素的算法

时间:2014-11-07 15:01:50

标签: c arrays algorithm

我正在尝试学习C而我正在尝试编写一段执行以下操作的代码:

  1. 用户输入自然数 n
  2. 用户输入 n 元素并将其存储在数组 x
  3. 删除数组 x
  4. 中的所有负数
  5. 打印新阵列,长度为 n - 已删除元素的数量
  6. 这是我的代码:

    #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++;
        };
    

    有人可以解释为什么后一个代码更好?

1 个答案:

答案 0 :(得分:1)

如果i==j,则您要为自己分配一个元素:不是错误,而是(小)浪费精力。

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