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

Why does the output of my bubble sort program change each time I run it?

这是我的代码:

#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");
}

这里是我的终端的截图window:http://i.imgur.com/Q1yCsgR.jpg

如您所见,我没有做任何更改,只是保留 运行 它直到它最终起作用。更重要的是,当我尝试在 main 中添加一个变量 n 时,它存储了 sizeof 数组,并替换了 for 循环中的 '8'对于 n,终端 window 的输出变得非常疯狂,每次我 运行 它都拒绝倾向于正确答案。

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

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

来修复它
for (int i = 0; i < 7 ; i++)

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

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