我无法弄清楚此代码中的错误,此代码没有错误但是没有给出正确的结果。
#include <stdio.h>
int main(int argc, const char *argv[])
{
int a[10], n, i, j, k, value_to_insert, hole_pos;
printf("Enter the total no: of elements in an array");
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
for (j = 1; j <= n; j++) {
value_to_insert=a[j];
hole_pos=j;
while (j > 0 && value_to_insert < a[hole_pos - 1]) {
a[hole_pos]=a[hole_pos-1];
hole_pos=hole_pos-1;
}
a[hole_pos] = value_to_insert;
}
printf("Sorted Array \n");
for (k = 0; k < n; k++)
printf("%d\n", a[k]);
return 0;
}
答案 0 :(得分:1)
而不是循环条件j <= n
应该有j < n
而不是j > 0
应该有hole_pos > 0
如果你编写代码,你应该知道代码的作用和方式。为什么你会在while循环中写j > 0
,当j
甚至没有在循环中递减时?
答案 1 :(得分:0)
该行有错误
for (j = 1; j <= n; j++)
value_to_insert=a[j];
当j的值等于n时,您将越过数组的边界。
所以它应该是
for (j = 1; j < n; j++)value_to_insert=a[j];
另一个错误就在于该行
while (j > 0 && value_to_insert < a[hole_pos - 1])
此处条件j>0
始终为真,因为j从1开始。
该行应写为
while (hole_pos > 0 && value_to_insert < a[hole_pos - 1])
。
每次递减hole_pos
时,都应该在进入循环之前检查它。希望这会有所帮助。