public class Sort {
private int[] array;
public Sort(int[] a){
this.array = a;
}
public void display(){
for(int i = 0;i<array.length;i++){
System.out.print(array[i] + " ");
}
System.out.println();
}
public void bubbleSort(){
for(int i = 0;i<array.length - 1;i++){
for(int j = 0;j<array.length - 1 - i;j++){
if(array[j]>array[j+1]){
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
System.out.print("第" + (i+1) + "趟排序的结果:");
display();
}
}
public static void main(String[] args){
int[] a = {9,8,7,6,1,2,3,4};
Sort sort = new Sort(a);
System.out.print("未排序的结果:");
sort.display();
sort.bubbleSort();
}
}
运行结果:
未排序的结果:9 8 7 6 1 2 3 4
第1趟排序的结果:8 7 6 1 2 3 4 9
第2趟排序的结果:7 6 1 2 3 4 8 9
第3趟排序的结果:6 1 2 3 4 7 8 9
第4趟排序的结果:1 2 3 4 6 7 8 9
第5趟排序的结果:1 2 3 4 6 7 8 9
第6趟排序的结果:1 2 3 4 6 7 8 9
第7趟排序的结果:1 2 3 4 6 7 8 9
由以上运行结果可知,当数组元素有序时,冒泡排序仍然在进行,为了避免没有数据交换的毫无意义的比较过程,可对上面的代码进行改进:
冒泡排序改进1:
public void bubbleSort(){
for(int i = 0;i<array.length - 1;i++){
boolean exchange = true; //1:设置交换变量
for(int j = 0;j<array.length - 1 - i;j++){
if(array[j]>array[j+1]){
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
exchange = false; //2:
}
}
System.out.print("第" + (i+1) + "趟排序的结果:");
display();
if(exchange == true) break; //3:
}
}
运行结果:
未进行排序的结果:9 8 7 6 1 2 3 4
第1趟排序的结果:8 7 6 1 2 3 4 9
第2趟排序的结果:7 6 1 2 3 4 8 9
第3趟排序的结果:6 1 2 3 4 7 8 9
第4趟排序的结果:1 2 3 4 6 7 8 9
第5趟排序的结果:1 2 3 4 6 7 8 9