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] > 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;
}
这段代码有什么问题? 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] > 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;
}