为什么我的冒泡排序实现打印了额外的数字?
Why my bubble sort implementation prints an extra numbers?
好的,我正在尝试实施冒泡排序,但是当我输入 0 作为数字时它无法正常工作。它显示额外的数字。
int main ()
{
int amount;
int numbers[50];
int x, y, z, j;
int swap;
printf("How many numbers do you want to sort: ");
scanf("%i", &amount);
for (x = 0; x <= amount; x++)
{
printf("Enter number %i: ", x);
scanf("%i", &numbers[x]);
}
for (j = 0; j <= amount; j++)
{
for (y = 0; y <= amount; y++)
{
if (numbers[y] > numbers[y + 1])
{
swap = numbers[y];
numbers[y] = numbers[y + 1];
numbers[y + 1] = swap;
}
}
}
for (z = 0; z <= amount; z++) {
printf("%i ", numbers[z]);
}
return 0;
}
如果你的 for 循环以 0 开始,x = 0; x <= amount;
会给你一个额外的循环。
即:
amount = 5,
loop: 0, 1, 2, 3, 4, 5 (total 6 times)
改用x = 0; x < amount;
amount = 5
loop: 0, 1, 2, 3, 4 (total 5 times)
还有一件事,您需要稍后检查 y
在循环中的位置:
numbers[y + 1] = swap;
as [y+1]
在循环的最后一次迭代时会导致越界错误。请记住,数组我们通常从 0 开始计数,因此最后一个元素是 size-1
.
如果您从 y = 0; y < amount;
开始循环,您将得到:
numbers[0], numbers[1], numbers[2]. numbers[3], numbers[4], total 5 elements
所以你最后一个 numbers[y + 1]
的循环实际上会尝试访问 numbers[5],这是一个不存在的理论上的第 6 个元素。建议将该循环设置为 y < amount-1
好的,我正在尝试实施冒泡排序,但是当我输入 0 作为数字时它无法正常工作。它显示额外的数字。
int main ()
{
int amount;
int numbers[50];
int x, y, z, j;
int swap;
printf("How many numbers do you want to sort: ");
scanf("%i", &amount);
for (x = 0; x <= amount; x++)
{
printf("Enter number %i: ", x);
scanf("%i", &numbers[x]);
}
for (j = 0; j <= amount; j++)
{
for (y = 0; y <= amount; y++)
{
if (numbers[y] > numbers[y + 1])
{
swap = numbers[y];
numbers[y] = numbers[y + 1];
numbers[y + 1] = swap;
}
}
}
for (z = 0; z <= amount; z++) {
printf("%i ", numbers[z]);
}
return 0;
}
如果你的 for 循环以 0 开始,x = 0; x <= amount;
会给你一个额外的循环。
即:
amount = 5,
loop: 0, 1, 2, 3, 4, 5 (total 6 times)
改用x = 0; x < amount;
amount = 5
loop: 0, 1, 2, 3, 4 (total 5 times)
还有一件事,您需要稍后检查 y
在循环中的位置:
numbers[y + 1] = swap;
as [y+1]
在循环的最后一次迭代时会导致越界错误。请记住,数组我们通常从 0 开始计数,因此最后一个元素是 size-1
.
如果您从 y = 0; y < amount;
开始循环,您将得到:
numbers[0], numbers[1], numbers[2]. numbers[3], numbers[4], total 5 elements
所以你最后一个 numbers[y + 1]
的循环实际上会尝试访问 numbers[5],这是一个不存在的理论上的第 6 个元素。建议将该循环设置为 y < amount-1