c - C 插入排序中的段错误

标签 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。

当我在主函数中对正整数表使用排序时,它会按照所需的方式对它们进行排序。但是,如果某些值为负数,则程序会产生段错误。

有人可以帮我找出错误吗?谢谢!

最佳答案

在第一个循环中(即当i为1时),然后这部分

while(list[i-1]>list[i])

相同
while(list[0]>list[1])

这没关系。现在假设 list[0]>list[1] 为 true。然后你会做:

    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错误的原因。

关于c - C 插入排序中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40982028/

相关文章:

C - 等待多个线程终止

C Sqlite3,当我使用sqlite3_exec函数和select语句时如何知道表是否为空?

c - C语言中的插入排序

c - 通过插入排序对数组进行排序

java - 插入排序与希尔排序程序。希尔排序仅在某些时候有效

c - 在c中按字典顺序对字符串进行排序

c - 循环命令

wordpress - 如何通过多个元键进行排序?

c++ - 对一串罗马数字进行排序

python - 使用sorted(dict.values(), ...)后打印字典