C 语言中插入排序中的分割错误



我正在尝试编写一种算法,该算法以递增的顺序对列表中的元素进行排序(插入排序)。我通过将以下所有变量(和数组)定义为 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

非法访问很可能是导致赛格故障的原因。

最新更新