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