【问题标题】:Why my bubble sort implementation prints an extra numbers?为什么我的冒泡排序实现会打印额外的数字?
【发布时间】:2017-06-28 05:58:55
【问题描述】:

好的,所以我尝试实现冒泡排序,但是当我输入 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;
}

【问题讨论】:

标签: c algorithm bubble-sort


【解决方案1】:

如果你的 for 循环从 0 开始,x = 0; x &lt;= amount; 会给你一个额外的循环。

即:

amount = 5,
loop: 0, 1, 2, 3, 4, 5 (total 6 times)

改用x = 0; x &lt; amount;

amount = 5
loop: 0, 1, 2, 3, 4 (total 5 times)

还有一件事,您需要稍后检查您的 y 在循环中的位置:

numbers[y + 1] = swap;

[y+1] 在循环的最后一次迭代时会导致越界错误。请记住,我们通常从 0 开始计数的数组,因此最后一个元素是 size-1

如果你从y = 0; y &lt; amount; 循环,你会得到:

numbers[0], numbers[1], numbers[2]. numbers[3], numbers[4], total 5 elements

因此,您使用numbers[y + 1] 的最后一个循环实际上会尝试访问数字[5],这是理论上不存在的第 6 个元素。建议将该循环设置为y &lt; amount-1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-13
    • 2015-09-12
    • 2017-03-11
    • 1970-01-01
    • 2014-12-04
    • 2012-07-23
    • 2016-03-07
    相关资源
    最近更新 更多