public class bubbleSort {
private int [] array;
public bubbleSort(int [] array) {
this.array=array;
}
public static void main(String[] args) {
int [] a= {3,5,2,8,0,4,7,29,11};
bubbleSort bsort=new bubbleSort(a);
System.out.print("未排序时的数组: ");
bsort.display();
bsort.sort();
}
//打印每次排序后的数组元素
public void display() {
for(int i=0;i<array.length;i++) {
System.out.print(array[i]+"\t");
}
System.out.println();
}
//冒泡排序
public void sort() {
int temp;
int len=array.length;
for(int i=0;i<len-1;i++) { //每次循环,确定一个相对大的数
boolean flag=false; //交换标志位
for(int j=1;j<len-i;j++) { //记录是第几次交换
if(array[j-1]>array[j]) { //如果前者大于后者,开始交换
flag=true; //发生交换
temp=array[j-1];
array[j-1]=array[j];
array[j]=temp;
}
}
System.out.print("第"+(i+1)+"次排序结果:");
display(); //输出交换后的结果
if(!flag) { //如果没有发生交换,证明已经是有序的了,结束排序
break;
}
}
}
}
测试结果:
优化:因为冒泡排序算法简单但效率较低,所以加入交换标志位,避免在有序的情况下无意义的数组遍历。
注:在Java中类似于if(!flag),交换标志位数据类型一定为布尔型;
在C中并没有明显的区分。