https://github.com/yzmaodeng/java-keypointknowledge/tree/master/src/main/java/com/zl/Datastructure/BubbleSort
说的简单一点 就是
一个村子看谁的本事大,村长为了不让老百姓乱跑,就每一个房子跑,一房子为单位,两个两个的比较,没比较一次就记录一下那个房子里面的人本事大,比较一轮得到一个最大的,同理剩下的房子里面用递归的方式来比较。
闭上眼都要背过来的代码
for(int i = 1 ; i < array.length; i++){ 3 个人比较两轮
for(int j = 0 ; j < array.length-i ; j++){ 第一轮 有3个人 比较两次
if(array[j]>array[j+1]){
array[j]=array[j]^array[j+1];
array[j+1]=array[j+1]^array[j];
array[j]=array[j]^array[j+1];
flag = false;
}
}
}
package com.zl.Datastructure.BubbleSort; public class BubbleSort { public static int[] sort(int[] array){ //这里for循环表示总共需要比较多少轮 for(int i = 1 ; i < array.length; i++){ //设定一个标记,若为true,则表示此次循环没有进行交换,也就是待排序列已经有序,排序已经完成。 boolean flag = true; //这里for循环表示每轮比较参与的元素下标 //对当前无序区间array[0......length-i]进行排序 //j的范围很关键,这个范围是在逐步缩小的,因为每轮比较都会将最大的放在右边 for(int j = 0 ; j < array.length-i ; j++){ if(array[j]>array[j+1]){ array[j]=array[j]^array[j+1]; array[j+1]=array[j+1]^array[j]; array[j]=array[j]^array[j+1];
flag = false; } } if(flag){ break; } //第 i轮排序的结果为 System.out.print("第"+i+"轮排序后的结果为:"); display(array);
} return array;
}
//遍历显示数组 public static void display(int[] array){ for(int i = 0 ; i < array.length ; i++){ System.out.print(array[i]+" "); } System.out.println(); }
public static void main(String[] args) { int[] array = {4,2,8,9,5,7,6,1,3}; //未排序数组顺序为 System.out.println("未排序数组顺序为:"); display(array); System.out.println("-----------------------"); array = sort(array); System.out.println("-----------------------"); System.out.println("经过冒泡排序后的数组顺序为:"); display(array); }
}
|