冒泡排序简单理解
冒泡排序 是 排序 中比较经典的一种算法。算法思想 简单可以理解为 元素 冒泡 至 指定位置(一般指末尾),
-
对于N个元素,需要进行N - 1 轮排序,即
for(int i = a.length - 1 ;i>0;i--){...}
, -
每轮确定 一个 当前序列 的 最大值元素
a[0 ~ i - 1]
,放到 当前序列的末尾a[i]
举栗,对于含有6个元素的 a[]
第一轮,从a[0] ~ a[5]
中 冒出 最大的 到 a[5]
,第一轮结束,a[5]
确定
第二轮,从a[0] ~ a[4]
中 冒出 最大的 到 a[4]
,第二轮结束,a[4]
确定
…
确定当前序列最大值元素 的方法:相邻位置的元素比较值大小,如果前面位置的元素 大于 后面位置的元素值,就 冒泡,交换值
一轮冒泡结束,最大元素到了 序列的末尾,
下轮冒泡的时候,就不用再 和 确定位置 的 元素比较
代码实现
- Bubble工具类
package xiaosi.bili.one;
public class Bubble {
/*
* sort()方法
*/
public static void sort(Comparable[] a) {
for(int i = a.length - 1;i > 0;i--) {
for(int j = 0;j < i;j++) {
if(gretter(a[j], a[j+1])) {
exch(a, j, j + 1);
}
}
}
}
/*
* greater()方法比较大小
*/
public static Boolean gretter(Comparable a, Comparable b) {
//Compareable接口提供的compareTo()方法
return a.compareTo(b) > 0;
}
/*
* exch()方法交换位置
*/
public static void exch(Comparable[] a,int i, int j) {
Comparable temp;
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
- TestBubbleSort测试类
package xiaosi.bili.one;
import java.util.Arrays;
public class TestBubbleSort {
public static void main(String[] args) {
// TODO Auto-generated method stub
//注意Compareable 是 比较对象类型,基本类型需要装箱
Integer a[] = {6,5,9,7,1,3,6,9};
Bubble.sort(a);
System.out.println("冒泡排序后的:" + Arrays.toString(a));
//冒泡排序后的:[1, 3, 5, 6, 6, 7, 9, 9]
}
}