在C:负数插入排序

时间:2014-11-13 10:56:22

标签: c segmentation-fault insertion-sort

我对编程很新,我的老师要我在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;
    }
}

1 个答案:

答案 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];

因为它们在随后的陈述中被覆盖。