慕斯2458264
2019-04-14 00:51
for(i=8; i>=0; i--)
{
for(j=0;j<=i;j++)
{
if(arr[j] > arr[j+1]) //当前面的数比后面的数大时
{
double temp; //定义临时变量temp
temp = arr[j]; //将前面的数赋值给temp
arr[j] = arr[j+1]; //前后之数颠倒位置
arr[j+1] = temp; //将较大的数放在后面
}
}
}
i=8是因为后面j<=i时if里调用arr[j]和arr[j+1]比较,j+1就可以调用到第十个数了;
temp是用来交换值的,arr[j]和arr[j+1]比较后,把大的那个赋给arr[j+1],如此循环大的值就会一步一步的移到最后面实现从小到大的排序。
数组是从0开始算的,一共10个数,所以当子循环里面也为8的时候可以+1这样子就可以把最大的数排在最后面了呀
建议自己跟着程序走一遍
因为数组arr[]里有10个元素,i是元素的下标,数组第一个元素是arr[0];i=8,也就是数组里面倒数一第二个元素。
上面的图是刚才随手画的;如果有N个元素
第一次冒泡,比较n-1次;、
第二次冒泡,比较n-2次;
第n-1次冒泡,比较1次;
temp就是一个盒子,先把前面的元素放盒子里,再把后面的元素给前面,最后从从盒子里把值给后面的元素,这样就换元素了,C是不能直接把两个值互相替换的,
应该是这样的吧?
C语言入门
926207 学习 · 20797 问题
相似问题