c语言冒泡排序法

#include<stdio.h>
int main()
{
int a[10];
int i,j,t,temp;
printf("请输入10个数:");
for (i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
for (j=1;j<=9;j++)
{
t=10-j;
for (i=0;i<t;i++)
{
if (a[i]>a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
}
for (i=0;i<=9;i++)
{
printf("%d\t",a[i]);
}
return 0;
}
初学者搞不懂冒泡排序求大神帮我打上注释,看书上的看了很久都没搞懂,最好能详细点的,感谢!

(1)基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。

(2)实例:

(3)代码解释:

#include<stdio.h>
int main()
{
int a[10];
int i,j,t,temp;//temp记录临时中间值
printf("请输入10个数:");
for (i=0;i<10;i++)
{
scanf("%d",&a[i]);//记录输入的十个数
}
for (j=1;j<=9;j++)
{
t=10-j;
for (i=0;i<t;i++)
{
if (a[i]>a[i+1]) {

// 交换两数的位置  

temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}

}
for (i=0;i<=9;i++)
{
printf("%d\t",a[i]);
}
return 0;
}


望采纳!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-02-04
第2个回答  推荐于2017-10-05
#include<stdio.h>
int main()
{
int a[10];
int i,j,t,temp;
printf("请输入10个数:");
for (i=0;i<10;i++) //输入10个待排序的数
{
scanf("%d",&a[i]);
}
for (j=1;j<=9;j++) //j从1到10循环
{
t=10-j; //t=10-j
for (i=0;i<t;i++) // i从0到t-1循环 比较相邻的元素。如果第一个比第二个大,就交换他们两个

{
if (a[i]>a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
}
for (i=0;i<=9;i++) //输出排序后的数字
{
printf("%d\t",a[i]);
}
return 0;
}
第一次循环j=0 t=9 里循环i从0到9将最大的数换到a[9];
因为a[9]已经是最大 接下来第二次循环 j=1 t=8 将剩下9个数中最大的换到a[8]以此类推到最后一个数。
上面那个循环嵌套完成的就是下面的过程
冒泡排序算法的运作如下:
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。追问

从j那里循环开始能不能再说明一下....

追答

比如10个数 5 8 7 6 0 1 3 9 4 2
第一次循环j=0 t=9 里循环的条件是ia[i+1]那么交换他们 所以第一次循环结束 变成 5 7 6 0 1 3 8 4 2 9 最大的元素9被换到了数组的最后,相当于已经把9的位置拍好了。所以下一次循环j=1,t=8,只用比较a[0]到a[8]然后8会被换到a[8],接着继续循环直到10个数排完

本回答被提问者和网友采纳