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]第一个循环中的code>将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