C语言数组排序的问题大家帮帮忙啊

来源:百度知道 编辑:UC知道 时间:2024/06/07 03:18:00
#define N 5
void main()
{
int grade[N],i,temp,j;
printf("qingshuru%dgrxuryuandechengji",N);
for (i=0;i<N;i++)
scanf("%d",&grade[i]);
for (i=0;i<N;i++)
{
for (j=0;j<N-i-1;j++)
{
if (grade[j]<grade[j+1])
{
temp=grade[j];
grade[j]=grade[j+1];
grade[j+1]=temp;
}
}
}
printf("\npaixuhoudechengjiwei;");
for (i=0;i<N;i++)
printf("%d ",grade[i]);
printf("\n");
getch();
}
麻烦解释一下,他定义的i,j变量是代表什么啊?还有 for (j=0;j<N-i-1;j++)
种的j<N-i-1是什么意思搞不懂啊!大家帮帮我啊谢谢了

这个是冒泡排序吧!
i和j都是循环次数
j<N-i-1是比较次数
因为之前的数已经通过冒泡的方法到最前面去了,而每循环一次最小的都是排到最前面了,所以后面的比较是不需要再比较最前面的,所以需要比较的次数就只有N-i-1次了.楼主去看看数据结构方面的书吧,我知道意思但是不知道给你说得清不清楚!

i表示的是“你所输入的成绩的个数”,也就是5个。分别是0.1.2.3.4
j是排序比较所用到的中间变量,计算它的值,你可以从for (j=0;j<N-i-1;j++)这里得到,简化后就是for (j=0;j<5-i-1;j++).如下:
i=o时,j<5-0-1;
i=1时,j<5-1-1;
···
依次类推。