想知道冒泡法是什么?
冒泡排序法,是C语言常用的排序算法之一,意思是对一组数字进行从大到小或者从小到大排序的一种算法。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。算法稳定性:冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,是不会再交换的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。
关于c语言冒泡问题
算法思想:通过相邻两个数之间的比较和交换,使较小的数逐渐从底部移向顶部(小数上浮), 较大的数逐渐从顶部移向底部(大数下沉),就像水底的气泡一样逐渐向上冒,故而得名。排序步骤:(1)比较第一个数与第二个数,若a[0]>a[1],则交换,大数放在a[1]中;然后比较a[1]与a[2]……依次类推,直至第n-1个数和第n个数比较结束为止——第一趟冒泡排序,结果最大的数被安置在最后一个元素位置上,沉到了最底部;(2)对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在 第n-1个元素位置;(3)重复上述过程,共经过n-1趟冒泡排序后,排序结束说明:n个数据排序,需要进行n-1轮冒泡排序,第i轮冒泡需要n-i次比较;使用两重循环控制整个排序过程,外层循环控制比较的轮次,内层循环控制每一轮的比较次数。例:从键盘上任意输入5个整数,要求按从小到大进行排序并在屏幕上显示出来。(冒泡排序法)#include "stdio.h"#define N 5void main(){int i,j,temp,a[N]; for(i=0;i<N;i++) scanf("%d",&a[i]); for(i=1;i<N;i++) for(j=0;j<N-i;j++) if(a[j]>a[j+1]){temp=a[j];a[j]=a[j+1]; a[j+1]=temp;} for(i=0;i<N;i++) printf("%d ",a[i]); }
什麽是“冒泡法”?
5
4
3
2
1
比如上面这5个数字我们把它按照由小到大的顺序排列,
从前往后相临两位比较大小,如果前一位比后一位大就把它俩
换位,5比4大就把5和4换位,得到45321
5又比3大
5和3换位
得到43521
依次类推最后得到
43215
这样就把最大的一个数字移到最后面了
然后不看5
,剩下4321
再用上面的方法把4移动到最后
得到
32145
在不看45
剩下321
把3移动到
最后,依此类推。
最终得到12345
这就是冒泡法,是计算机编程排序中最简单快捷的方法。
除此意外我还能写出许多排序方法,但是效率上都不如冒泡法
至于为什么叫冒泡法呢,你把这几个数字竖起来看
1
2
3
4
5
把最大的数字5看成最大的泡泡,浮到最上,然后4又浮上去,依此类推
得到
5
4
3
2
1
所以形象的称为冒泡法