Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在C中重新排列数组,通过保持顺序将负数与正数分开_Arrays_C_Sorting - Fatal编程技术网

Arrays 在C中重新排列数组,通过保持顺序将负数与正数分开

Arrays 在C中重新排列数组,通过保持顺序将负数与正数分开,arrays,c,sorting,Arrays,C,Sorting,我打算对数组进行排序,方法是将数组中的负整数放在前面(左侧),将正整数放在右侧,除非不改变其顺序的外观。由于某种原因,负片和正片的排列不起作用,并且程序在resultar中显示的是零而不是正片。如果有人能帮我纠正我的错误,我将不胜感激 #include <stdio.h> #define LENGTH 9 int numArr[LENGTH] = {5, -7, -87, -221, 7, 97, 1, -5, 5}; int resultArr[LENGTH]; int i;

我打算对
数组
进行排序,方法是将数组中的负整数放在前面(左侧),将正整数放在右侧,除非不改变其顺序的外观。由于某种原因,负片和正片的排列不起作用,并且程序在
resultar
中显示的是零而不是正片。如果有人能帮我纠正我的错误,我将不胜感激

#include <stdio.h>

#define LENGTH 9

int numArr[LENGTH] = {5, -7, -87, -221, 7, 97, 1, -5, 5};
int resultArr[LENGTH];
int i;
int j = 0;
int disp;

int main()
{
    for (int i = 1; i < LENGTH; i++)
    {
        disp = numArr[i];
        if (disp > 0)
    {
        continue;
    }
    
    j = i - 1;
    
    while (resultArr[j] > 0 && j>= 0)
    {
        resultArr[j + 1] = resultArr[j];
        j--;
    }
    resultArr[j + 1] = disp;
}

printf("Original array : %d ", *numArr);
for (i = 1; i < LENGTH; i++)
{
    printf(" %d ", numArr[i]);
}
    
printf("Rearranged array : ");
for (j = 0; j < LENGTH; j++)
{
    printf(" %d ", resultArr[j]);
}

return 0;
}
#包括
#定义长度9
int numArr[LENGTH]={5,-7,-87,-221,7,97,1,-5,5};
int resultar[LENGTH];
int i;
int j=0;
int disp;
int main()
{
for(int i=1;i0)
{
继续;
}
j=i-1;
而(结果r[j]>0&&j>=0)
{
resultar[j+1]=resultar[j];
j--;
}
结果r[j+1]=disp;
}
printf(“原始数组:%d”,*numar);
对于(i=1;i
我很难对您的代码发表评论,因为我不知道每个循环的目的是什么

这是我的代码版本:

Original array :  5  -7  -87  -221  7  97  1  -5  5 
Rearranged array :  -7  -87  -221  -5  5  7  97  1  5 
at beginning:
numArr = [ 5   -7   -87  -221  7  97  1  -5  5 ]
          ^ i
resArr = [                                     ]
          ^ j

during first loop:
numArr = [ 5   -7   -87  -221  7  97  1  -5  5 ]
                               ^ i
resArr = [-7  -87  -221                        ]
                         ^ j

just after first loop:
numArr = [ 5   -7   -87  -221  7  97  1  -5  5 ]
                                                 ^ i
resArr = [-7  -87  -221  -5                    ]
                             ^ j

just before second loop:
numArr = [ 5   -7   -87  -221  7  97  1  -5  5 ]
           ^ i
resArr = [-7  -87  -221  -5                    ]
                             ^ j

during second loop:
numArr = [ 5   -7   -87  -221  7  97  1  -5  5 ]
                                  ^ i
resArr = [-7  -87  -221    -5  5   7           ]
                                      ^ j

at the end:
numArr = [ 5   -7   -87  -221  7  97  1  -5  5 ]
                                                 ^ i
resArr = [-7  -87  -221    -5  5   7  97  1  5 ]
                                                 ^ j
#包括/*printf*/
#定义长度9
void moveNegativeToFront(int const*numar,int*resultar,int length)
{
int i;
int j;
j=0;
对于(i=0;i=0)
{
结果r[j]=numArr[i];
j++;
}
}
}
内部主(空)
{
int numArr[LENGTH]={5,-7,-87,-221,7,97,1,-5,5};
int resultar[LENGTH];
int i;
printf(“原始数组:”);
对于(i=0;i
输出:

Original array :  5  -7  -87  -221  7  97  1  -5  5 
Rearranged array :  -7  -87  -221  -5  5  7  97  1  5 
at beginning:
numArr = [ 5   -7   -87  -221  7  97  1  -5  5 ]
          ^ i
resArr = [                                     ]
          ^ j

during first loop:
numArr = [ 5   -7   -87  -221  7  97  1  -5  5 ]
                               ^ i
resArr = [-7  -87  -221                        ]
                         ^ j

just after first loop:
numArr = [ 5   -7   -87  -221  7  97  1  -5  5 ]
                                                 ^ i
resArr = [-7  -87  -221  -5                    ]
                             ^ j

just before second loop:
numArr = [ 5   -7   -87  -221  7  97  1  -5  5 ]
           ^ i
resArr = [-7  -87  -221  -5                    ]
                             ^ j

during second loop:
numArr = [ 5   -7   -87  -221  7  97  1  -5  5 ]
                                  ^ i
resArr = [-7  -87  -221    -5  5   7           ]
                                      ^ j

at the end:
numArr = [ 5   -7   -87  -221  7  97  1  -5  5 ]
                                                 ^ i
resArr = [-7  -87  -221    -5  5   7  97  1  5 ]
                                                 ^ j
两个循环的解释以及执行期间
i
j
的可视化:

Original array :  5  -7  -87  -221  7  97  1  -5  5 
Rearranged array :  -7  -87  -221  -5  5  7  97  1  5 
at beginning:
numArr = [ 5   -7   -87  -221  7  97  1  -5  5 ]
          ^ i
resArr = [                                     ]
          ^ j

during first loop:
numArr = [ 5   -7   -87  -221  7  97  1  -5  5 ]
                               ^ i
resArr = [-7  -87  -221                        ]
                         ^ j

just after first loop:
numArr = [ 5   -7   -87  -221  7  97  1  -5  5 ]
                                                 ^ i
resArr = [-7  -87  -221  -5                    ]
                             ^ j

just before second loop:
numArr = [ 5   -7   -87  -221  7  97  1  -5  5 ]
           ^ i
resArr = [-7  -87  -221  -5                    ]
                             ^ j

during second loop:
numArr = [ 5   -7   -87  -221  7  97  1  -5  5 ]
                                  ^ i
resArr = [-7  -87  -221    -5  5   7           ]
                                      ^ j

at the end:
numArr = [ 5   -7   -87  -221  7  97  1  -5  5 ]
                                                 ^ i
resArr = [-7  -87  -221    -5  5   7  97  1  5 ]
                                                 ^ j
我改变了什么:

Original array :  5  -7  -87  -221  7  97  1  -5  5 
Rearranged array :  -7  -87  -221  -5  5  7  97  1  5 
at beginning:
numArr = [ 5   -7   -87  -221  7  97  1  -5  5 ]
          ^ i
resArr = [                                     ]
          ^ j

during first loop:
numArr = [ 5   -7   -87  -221  7  97  1  -5  5 ]
                               ^ i
resArr = [-7  -87  -221                        ]
                         ^ j

just after first loop:
numArr = [ 5   -7   -87  -221  7  97  1  -5  5 ]
                                                 ^ i
resArr = [-7  -87  -221  -5                    ]
                             ^ j

just before second loop:
numArr = [ 5   -7   -87  -221  7  97  1  -5  5 ]
           ^ i
resArr = [-7  -87  -221  -5                    ]
                             ^ j

during second loop:
numArr = [ 5   -7   -87  -221  7  97  1  -5  5 ]
                                  ^ i
resArr = [-7  -87  -221    -5  5   7           ]
                                      ^ j

at the end:
numArr = [ 5   -7   -87  -221  7  97  1  -5  5 ]
                                                 ^ i
resArr = [-7  -87  -221    -5  5   7  97  1  5 ]
                                                 ^ j
  • 我修正了主算法中的两个循环,一个清晰地复制负数,另一个清晰地复制正数
  • 我在代码中添加了一些注释来解释它的功能
  • 我将主算法移动到一个单独的函数,并在
    main()中进行测试
  • 我删除了所有全局变量,并用局部变量替换它们
  • 我添加了
    printf(“\n”)在两个位置添加新行并刷新标准输出

您忘记初始化
j
。因此,
j
可能有一个无意义的值,
resultar[j]=numar[i]
numArr[i]
复制到内存的某个随机位置,甚至可能使程序崩溃,或其他一些未定义的行为。看起来您在我的评论之后编辑了您的问题,用变量
j
解决了这个问题。你的代码现在工作了吗?你还有问题吗?@Stef谢谢你的评论,是的,我编辑了它,但是resultArray的数字序列仍然与numArray相同,并且所有的正数都返回为零…你删除了行
resultArr[j]=numArr[I]。你打算把它移走吗?现在,第一个循环没有任何作用。@Stef我将其删除并放回原处,结果还是一样的。两种情况下的输出仍然是这样的:原始数组:5-7-87-221 7 97 1-5 5重新排列的数组:-7-87-221 0-50