这段代码有什么问题?而循环部分不起作用。 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;
}
答案 0 :(得分:0)
j--;
位于您的if
声明中。如果data[j-1] > tmp
为false
,则您的循环不会终止。除此之外,您的算法不会对数组进行排序。像这样调整你的代码:
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;
}