冒泡排序法(Bubble Sort)是所有排序算法中最简单,最基本的一种。冒泡排序法的基本思路就是交换排序,通过相邻数据的比较来达到排序的目的。
冒泡排序法
冒泡排序算法通过多次比较和交换数据来实现排序,其排序流程如下:
(1)对数组中的各元素依次比较相邻元素的大小。
(2)如果前面的数据大于后面的数据,就交换这两个数据。经过第一轮排序,则最大值已经排到最后。
(3)再用同样的方法将剩下的数据逐个比较,最终得到由小到大数组。
为了更清晰的理解冒泡排序算法的流程。这里我们举一个实际数据的例子来一步步的执行冒泡排序。对5个整型数据118,101,105,127,112,这是一组无序数据。对其执行冒泡排序过程,如图4-2所示,冒泡排序算法执行步骤如下:
如图我们可以看出经过第一轮的四次排序,其中最大值已经排到了最末尾位置。继续排序即可实现所有数据由小到大显示。
从上面的例子,我们可以非常直观的了解冒泡排序的执行过程。整个冒泡排序过程可以形象的类似于水泡的浮起过程,因此而得名。冒泡排序算法在对N个数据进行排序时,无论原数据有无顺序,都需要进行N-1步中间排序。这种排序思路简单直观,但是缺点就是执行的步骤有点长,效率不高。
一种改进的方法,就是在每次中间排序之后,比较一下数据是否已经按照顺序排列完成。如果完成则退出排序过程,否则继续排序。这样,对于数据比较有规则的,可以加速算法的执行过程。
冒泡排序算法代码如下:
void bubbleSort(int[] a){
int temp; //用于交换数据
int tag; //判断排序提前完成
for(int i=0;i<a.length;i++){
tag=0;
for(int j=0;j<a.length-i;j++){
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=a[j];
tag=1; //如果发生排序交换则tag=1;
}
}
if(tag==0)break;//如果tag依旧等于0即说明未发生交换,排序完成
}
}