C-插入排序

时间:2016-02-08 17:25:12

标签: c insertion-sort

这段代码有什么问题?而循环部分不起作用。 if语句不足以在循环中终止

int main(void) {

    int data[SIZE] = { 12,2,5,8,2,45,89,0,12,4 };

    int i, j, tmp;

    for (i = 0; i < SIZE-1; i++) {
        j = i + 1;
        tmp = data[j];
        while (j > 0){
            if(data[j-1] > tmp){
                data[j] = data[j - 1];
                j--;
            }
        }
        data[j] = tmp;
    }

    for (i = 0; i < SIZE; i++)
        printf("%d, ", data[i]);

return 0;
}

1 个答案:

答案 0 :(得分:0)

j--;位于您的if声明中。如果data[j-1] > tmpfalse,则您的循环不会终止。除此之外,您的算法不会对数组进行排序。像这样调整你的代码:

int main (void)
{
    int data[SIZE] = { 12,2,5,8,2,45,89,0,12,4 };

    int i, j, tmp;

    for (i = 0 ; i < SIZE - 1; i++)
    {
        j = i+1;
        while ( j > 0 && data[j] < data[j-1])
        {
            tmp       = data[j];
            data[j]   = data[j-1];
            data[j-1] = tmp;
            j--;
        }
    }

    for (i = 0; i < SIZE; i++) {
        printf("%d, ", data[i]);
    }
    return 0;
}