c语言这段程序是什么意思

功能是冒泡排序

#include"stdio.h"
void main()
{
int i,j,temp;
int a[10];
for(i=0;i<10;i++)
scanf ("%d,",&a[i]);
for(j=0;j<=9;j++)
{ for (i=0;i<10-j;i++) \\这里为什么是10-j呢 10不行吗
if (a[i]>a[i+1])
{ temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;}
}
for(i=1;i<10;i++)
printf("%d,",a[i]);
printf("\n");
}
知道是冒泡排序,就是这句不太理解

{ for (i=0;i<10-j;i++) \\这里为什么是10-j呢 10不行吗

冒泡排序就是从数组第一个元素开始进行两两比较,即a[i]和a[i+1](i从1开始)比较,如果a[i]>a[i+1],则将两者值交换,目的是让两者中最大值排在后面,这样通过一轮比较,数组中最大值就排在数组最后的位置,即a[9].这样再进行一轮比较,这次是为了把前9个数最大值存在a[8];重复这种思路,在进行循环比较,循环比较次数是9,即j最大值为9。i之所以要小于10-j,因为第1次要对前10个进行比较,a[9]存下最大值,第2次对前9个数比较,a[8]存下次最大值,第j+1次对前10-(j+1)+1个数比较,a[10-(j+1)]存下前10-j中的最大值。通过把大值一个一个放到后面,从而完成从小到大的排序。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-04-18
为什么是10-j?
因为10-j之后的已经排好序了。
这就是为什么叫它冒泡排序的原因。
每次最大的泡泡沉到最低(最大的数放到最后),第j趟过后,都有第j大的数字在倒数第j位上,所以下一次只要排前面的10-j个就OK了本回答被提问者采纳
第2个回答  2010-04-18
因为j做一次循环就有一个数排序好了,所以减去j就是为了提高循环的效率
也许对你会有帮助
第3个回答  2010-04-18
排序
相似回答