为什么每次 运行 我的冒泡排序程序的输出都会改变?
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++)
,它应该可以工作。
这是我的代码:
#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++)
,它应该可以工作。