我试图编写一种算法,按递增顺序(插入排序)对列表中的元素进行排序。我通过将所有以下变量(和数组)定义为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函数中我使用带有正整数表的sort时,它会以所需的方式对它们进行排序。但是,如果某些值为负,则程序会产生分段错误。
有人可以帮我弄清楚错误吗?谢谢!
答案 0 :(得分:2)
在第一个循环中(即当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
非法访问可能是seg故障的原因。