有人可以帮我解释下这个C题吗?

来源:百度知道 编辑:UC知道 时间:2024/05/22 18:51:41
已知序列{17,18,60,40,7,32,73,65,85},采用冒泡泡对这个序列排序!!
请详细说明其中的前因后果,谢谢~
我想知道的是这个泡泡的原理呀~!不用编程工具是怎么个排法的?

泡泡算法~呵呵:
17,18,60,40,7,32,73,65,85
第一遍:9个数字里面选最大的,先从第一个17开始,比较第一个和第二个,把大的放在第2个,再比较第2个和第3个,把大的放第三个,一直比较到第8和第9,把大的放第9,那么第9就是9个里面最大的了,结果:
17,18,40,7,32,60,65,73,85
哈哈,85冒个泡泡给冒出来了~

第2遍,由于第9个已经是最大的了,用相同的比较方法比较1到8,把最大的冒泡冒到第8,这个时候第8就是剩下8个里面最大的,如此反复,所有的数就按最小到最大挨个冒泡冒出来呵呵,第2遍结果:
17,18,7,32,40,60,65,73,85 73被冒出来~
第3次结果:
17,7,18,32,40,60,65,73,85 65冒出来
第4次:
7,17,18,32,40,60,65,73,85

到这里,再继续比较到第9次,就能把整个排出来,但是由于这个数列从这个时候已经整齐了,后面都不会再变动,所以我们通常设置一个信号量来判断该次如果没有变动,就不用做下面每一步了,从而提高了效率,这种办法就变成了教科书里面的优化的冒泡泡呵呵~

就是用一个两层的循环来逐个比较每两个元素之间的大小,如果靠前的元素比后面的大的话就把两个元素位置互换。循环完了以后的数组就是排序好的了

for (int i=0;i<maxn-1;i++)
for (int j=i+1;j<maxn;j++)
{
if (data[i]>data[j])//如果i比j上的元素大则位置互换
{
int temp=data[i];
data[i]=data[j];
data[j]=temp;
}
}

呵呵,冒泡泡
冒泡排序的思想是从前向后扫描一遍,将最大的数字放到最后面去,这样只需要再排前n-1个数字了,然后用同样的方法,一共扫描n遍就可以将该数列排成有序数列了