我对编程很新,我的老师要我在C中实现插入排序。
我的代码有效,但如果我在数组中使用负数而不是负数,我总是会遇到分段错误:
void insertion_sort(int array[], int len) {
int i = 0;
int j = 1;
signed int tmp = array[0];
for(i = 1; i < len; i++) {
tmp = array[i];
j = i - 1;
if(j >= 0){
while(tmp < array[j]) {
array[j + 1] = array[j];
j = j - 1;
}
}
array[j + 1] = tmp;
}
}
答案 0 :(得分:1)
更改此代码段
if(j >= 0){
while(tmp < array[j]) {
array[j + 1] = array[j];
j = j - 1;
}
}
到
while ( j >= 0 && tmp < array[j] ) {
array[j + 1] = array[j];
j = j - 1;
}
考虑到初始化已定义变量
是没有意义的int i = 0;
int j = 1;
signed int tmp = array[0];
因为它们在随后的陈述中被覆盖。