为什么每次运行时我的冒泡排序程序的输出都会改变?

时间:2016-09-04 18:09:14

标签: c bubble-sort cs50

这是我的代码:

#include<stdio.h>
#include<cs50.h>

int main(void)
{
    int array[8] = {2, 5, 3, 1, 4, 6, 9, 7};

    for (int j = 0; j < 8; j++)
    {
        for (int i = 0; i < 8 ; i++)
        {
            if (array[i] > array[i + 1])
            {
                int temp = array[i];
                array[i] = array[i + 1];
                array[i + 1] = temp;
            }
        }   
    }

    for (int i = 0; i < 8; i++)
        printf("%i", array[i]);

    printf("\n");
}

以下是我的终端窗口的屏幕截图:http://i.imgur.com/Q1yCsgR.jpg

正如你所看到的,我没有做任何改动,只是一直运行它直到最终工作。更重要的是,当我尝试在main中添加一个存储 sizeof 数组的变量 n ,并替换了&#39; 8&#39;在带有n的for循环中,到终端窗口的输出只是非常疯狂,并且每次运行时都拒绝倾向于正确的答案。

2 个答案:

答案 0 :(得分:4)

if (array[i] > array[i + 1])

在上面的if语句中,当i为7时,您正在访问越界,并且会导致undefined behaviour。您可以通过将for循环条件更改为:

来解决此问题
for (int i = 0; i < 7 ; i++)

答案 1 :(得分:1)

i为7的内部循环中,您访问未定义的array[i+1]

将内循环更改为for (int i = 0; i < 7 ; i++),它应该可以正常工作。