C中插入排序中的分段错误

时间:2016-12-05 19:40:24

标签: c sorting insertion-sort

我试图编写一种算法,按递增顺序(插入排序)对列表中的元素进行排序。我通过将所有以下变量(和数组)定义为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时,它会以所需的方式对它们进行排序。但是,如果某些值为负,则程序会产生分段错误。

有人可以帮我弄清楚错误吗?谢谢!

1 个答案:

答案 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故障的原因。