C语言冒泡排序c语言冒泡排序

#include<stdio.h>
int main()
{
int a[10], i, j, t, flag;
printf("input 10 numbers:\n");
for (i = 0; i < 10; i++)
scanf_s("%d", &a[i]);
for (i = 1; i <= 9; i++,flag=0)
{
for (j = 0; j < 10 - i; j++)
{
if (a[j] > a[j + 1])
{
t = a[j]; a[j] = a[j + 1]; a[j + 1] = t;flag = 1;
}
}
if (flag ==0)
break;
}
printf("从小到大的数字是:\n");
for (i = 0; i < 10; i++)
printf("%d", a[i]);
printf("\n");
return 0;
}

img


这个flag 判断如果已经顺序就不再循环了 该怎么修改

for (j = 0; j < 9 - i; j++)
flag是不需要的,可以去掉

int a[10], i, j, t, flag=0; 这行改成这样

你这里报错是因为flag还没有初始化就使用了,
就是说调用if(flag == 0)的时候,还没有调用过flag的赋值操作,应该是你的数据第一次就是有序的了。
在声明的时候给一个初始值就不会报错了
比如这样int a[10], i, j, t, flag=0;