C-插入排序

C- Insertion sort

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

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;
}

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;
}