帮忙讲解下小程序。。

#include<stdio.h>
int main()
{
int i,j,a[10],t;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(j=1;j<10;j++) 这里不明白
for(i=0;i<=9-j;i++) 这里不明白
if(a[i]>a[i+1]) 花括号里不明白
{
t=a[i+1];
a[i+1]=a[i];
a[i]=t;
}
for(i=0;i<10;i++) 这里不明白
printf("%5d",a[i]);
}

这是一个冒泡(起泡)排序算法
冒泡排序的具体过程如下:

第一步,先比较k1和k2,若k1>k2,则交换k1和k2所在的记录,否则不交换。继续对k2和k3重复上述过程,直到处理完kn-1和kn。这时最大的排序码记录转到了最后位置,称第1次起泡,共执行n-1次比较。

与第一步类似,从k1和k2开始比较,到kn-2和kn-1为止,共执行n-2次比较。

依次类推,共做n-1次起泡,完成整个排序过程。

若文件的初始状态是正序的,一趟扫描即可完成排序。所需关键字比较次数为n-1次,记录移动次数为0。因此,冒泡排序最好的时间复杂度为O(n)。

若初始文件是反序的,需要进行n-1趟排序。每趟排序要进行n-i次关键字的比较(1<=i<=n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较次数达到最大值n(n-1)/2=O(n^2),移动次数也达到最大值3n(n-1)/2=O(n^2)。因此,冒泡排序的最坏时间复杂度为O(n^2)。

你把这个理解了 上面的程序你就好理解了 两个循环 中间的循环式在两两比较 上层循环则是改变比较的数字的位置 从第一个到最后一个
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-07-26
#include<stdio.h>
int main()
{
int i,j,a[10],t;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(j=1;j<10;j++) //j=1,判断j是否小于10,是的话执行下面的语
句,最后j=j+1。
for(i=0;i<=9-j;i++)
if(a[i]>a[i+1]) //要是a数组中,a[i]的值大于a[i+1]的话,就
令 a[i]与a[i+1]的值对调
{
t=a[i+1];
a[i+1]=a[i];
a[i]=t;
}
for(i=0;i<10;i++) //a的值按照a[0],a[1],a[2]...的顺序打印出来
printf("%5d",a[i]);
}

整个程序的作用:先在数组a[10]中比较一次,把最大值赋给a[10],然后比较数组a[9],把最大值赋给a[9],不停地把最大值,次大值,次次大值调到数组的最后一位,最后按照从小到大的顺序打印出来。
还有什么不明白的baiduhi我吧,改了四次。本回答被提问者采纳
第2个回答  2010-07-26
整体就是对数组的一个排序,然后输出,回去再好好看看书上给的排序法吧
第3个回答  2010-07-26
建议楼主先看书,首先,for是循环语句,if是条件语句。这两个搞懂了,你就知道了。