冒泡排序
一.为何叫冒泡排序
因为在冒泡排序的过程中,要求降序的话,最小的元素会经过与相邻的交换慢慢“浮”到最后面,其过程很像鱼在吐泡泡。
二.冒泡排序的思想
有点像古代的比武招亲,依次从头到尾把每一个对手都干掉,站在最后面的人就能迎娶公主了。
来模拟一下: 初始人的武力值: 9 , 5 , 6 , 4 ,5, 4
首先 9 与 5 pk,可以把5号拿下 ,所以交换 :5 , 9 , 6, 4, 5, 4
最终,9 会来到最后面: 5, 6 , 4 , 5,4, 9
这样子,最后一个位置名花有主了,接下来就要安排从剩下的人才中选个最猛的给倒数第二的,以此类推。
三.冒泡具体代码实现
package DoExercise;
public class Bubblesort {
/**
* 打印数组
* @param arr
*/
public static void printArr(int[] arr) {
for(int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
}
/**
* 交换两个数
* @param arr
* @param i
* @param j
*/
private static void swap(int[] arr, int i, int j) {
int temp = arr[i] ;
arr[i] = arr[j];
arr[j] = temp;
}
/**
* 冒泡排序
* @param arr
*/
private static void bubbleSort(int[] arr) {
if(arr == null || arr.length < 2) {//没人或者只有一个单身狗参加什么比武招亲
return;
}
//思路:依次从头到尾把每一个对手都干掉的人,站在最后面的人就能迎娶公主了。
//1.遍历数组
for(int i = arr.length - 1; i >= 0; i--) {//i表示需要找汉子的公主,从数组最后一个位置开始,从后往前安排
for(int j = 0; j < i; j++) {// 由于i之后都已经名花有主了,只能从开始的0到 i -1 中的人才中选
if(arr[j] > arr[j + 1]) {//如果 打不过,那就下一位吧。
swap(arr,j,j + 1); //直接晋级
}
}
}
}
public static void main(String[] args) {
int[] arr = {5,4,3,2,1};//1.定义测试数据
printArr(arr); //2.打印测试数据
bubbleSort(arr);//3.进行冒泡排序
printArr(arr); //4..打印排序后数据数据
}
}
结果: