前言:本篇参考《图解算法》
冒泡排序法又称为交换排序法,是从观察水中气泡变化构思而成的,原理是从第一个元素开始,比较相邻元素大小,若大小顺序有误,则对调后再进行下一个元素的比较,就仿佛气泡从水底开始逐渐升到水面一样。如此通过扫描一次之后就可以确保最后一个元素位于正确的顺序。接着进行第二次扫描,直到完成所有元素的排序为止。
动态效果图:
/**
* @author admin $
* @title
* 冒泡排序
* @description $
* @updateTime $ 20:32$ $
* @throws $
*/
public class BubbleSort {
public static void main(String[] args) {
int i,j ,temp;
int data[]={6,5,9,7,2,8};
System.out.println("冒泡排序法:");
System.out.println("原始数据为:");
for ( i = 0; i < 5; i++) {
System.out.print(data[i]);
}
System.out.println("----------");
for ( i = 5; i >0 ; i--) {
for (j = 0; j < i; j++) {
if (data[j] > data[j + 1]) {
temp = data[j];
data[j] = data[j + 1];
data[j + 1] = temp;
}
}
System.out.print("第" + (6 - i) + "次的排序结果是");
for (j = 0; j < 6; j++) {
System.out.print(data[j]);
}
System.out.println();
}
System.out.println();
System.out.print("排序后的结果是");
for ( i = 0; i < 6; i++) {
System.out.print(data[i]+" ");
}
}
}
运行结果:
缺点:不管数据是否已排完成都会固定执行n(n-1)/2次
下面是改进冒泡排序法,以提高程序执行的效率
package DateStructures.Queue;
/**
* @author admin $
* @title $
* @description $
* @updateTime $ 20:53$ $
* @throws $
*/
public class Sentry {
int data[]=new int[]{4,6,2,7,8,9};
public static void main(String[] args) {
System.out.print("改进的冒泡排序原始数据为");
Sentry test=new Sentry();
test.showdata();
test.bubble();
}
public void showdata(){
int i;
for ( i = 0; i < 6; i++) {
System.out.print(data[i]+" ");
}
System.out.println();
}
public void bubble(){
int i,j,temp,flag;
for (i=5;i>=0;i++){
flag=0;
for (j=0;i<i;j++){
if (data[j]>data[j+1])
{
temp=data[j];
data[j]=data[j+1];
data[j+1]=temp;
flag++;
}
} if (flag==0){
break;
}
System.out.print("第"+(6-i)+"次排序:");
for (j=0;j<6;j++){
System.out.println(data[j]+" ");
}
System.out.println();
}
System.out.println("排序后的结果为:");
showdata();
}
}