我正在尝试编写一种算法,该算法以递增的顺序对列表中的元素进行排序(插入排序)。我通过将以下所有变量(和数组)定义为 int 来启动 main 函数。 这是排序功能:
void sort(int a, int b , int list[], int i)
{
for(i=1; i<(b); i++)
{
while(list[i-1]>list[i])
{
a = list[i-1];
list[i-1]=list[i];
list[i]=a;
i--;
}
}
}
b 是列表中的元素数,a 在 main 中初始化为 0。
在 main 函数中,我对正整数表使用排序时,它会以所需的方式对它们进行排序。但是,如果某些值为负数,则程序将产生分段错误。
有人可以帮助我找出错误吗?谢谢!
在第一个循环中(即当i
为 1 时),则这部分
while(list[i-1]>list[i])
与
while(list[0]>list[1])
这没关系。现在假设list[0]>list[1]
为真。然后你会做:
a = list[i-1]; ---> same as a = list[0];
list[i-1]=list[i]; ---> same as list[0]=list[1];
list[i]=a; ---> same as list[1]=a;
i--; ---> Now i becomes 0
这也没关系。但下一句话将是
while(list[i-1]>list[i]) ---> same as while(list[-1]>list[0])
^^
Illegal access
非法访问很可能是导致赛格故障的原因。