冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法。它的基本思想就是两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
java代码实现如下:
package fanzhenhua.sort;
import java.util.Arrays;
public class BubbleSort {
//冒泡排序
public static void bubbleSort(DataWrap[] data){
int length=data.length;
//定义一个boolean类型的变量,用来控制提前退出
boolean flag=false;
DataWrap temp=null;
//总共需要比较n-1趟,n为元素个数
for(int i=0;i<length-1;i++){
//每一趟的比较元素个数为n-i个,反应到数组中的下标就是n-i-1
for(int j=0;j<length-i-1;j++){
if(data[j].compareTo(data[j+1])>0){
temp=data[j];
data[j]=data[j+1];
data[j+1]=temp;
flag=true;
}
}
System.out.println(Arrays.toString(data));
//如果在某一趟的比较中发现没有移动任何元素,则表明数组已经有序,必须要在进行重复的比较了
if(!flag){
break;
}
}
}
public static void main(String[] args) {
DataWrap[] data = {
new DataWrap(1, "")
,new DataWrap(2, "")
,new DataWrap(4, "")
,new DataWrap(5, "*")
,new DataWrap(5, "")
,new DataWrap(9, "")
};
System.out.println("排序之前:" + Arrays.toString(data));
bubbleSort(data);
System.out.println("排序之后:" + Arrays.toString(data));
}
}
冒泡排序算法分析:
冒泡排序的时间效率是不确定的:最好的情况下,初始序列已经处在有序状态,执行一趟冒泡即可,做n-1次比较,无需进行任何交换;但在最坏的情况下,初始序列完全逆序,算法要执行n-1趟冒泡,第i趟做n-i次比较,执行n-i-1次对象交换,此时比较总次数为n*(n-1)/2,数据移动总次数为n*(n-1)*3/2。
冒泡排序算法的空间效率很高,只需一个附加程序单元用于交换,其空间效率为O(1)。
同时冒泡排序是稳定的
参考文章: