冒泡排序的操作是 两两比较相邻的两个元素,如果第一个元素比较大则交换这两个元素的位置,否则比较下一对元素。直至没有元素比较。很明显一趟冒泡排序可以找到一个最大或者最小的元素。需要经历n趟冒泡(n为元素个数)
那么为什么叫冒泡排序呢
泡沫从水底中产生并上升直至到水面,破裂消失。泡沫是一直变大的,这个过程跟这个排序很相似。
这个算法我感觉是最容易实现的,两层循环。外层循环控制要判断的元素的位置的边界,所以循环变量从 len-1 取值到 0,。内层循环实现一次冒泡排序,所以循环变量从 0 取值 至外层循环变量的值。这是有做一定优化的,过滤掉一些不必要的判断。当然也可以两个循环都从 0 取值到 len-1 。
代码如下
简直简洁到不行
@Override
public void sort(int[] a) {
int len=a.length;
for(int i=len-1;i>0;i--){
for(int j=0;j<i;j++){
if(SortUtils.less(a[j+1], a[j]))
SortUtils.exch(a, j+1, j);
}
}
}