通俗的讲,冒泡排序我的理解是,举个例子吧。..
将未排序的数放在一个数组中,例如数组中的值是3,-1,10,4,9。要进行多趟排序,最终才能达到一个有序的数组。就是将数组的一个值与后面的一个值进行比较,如果前面的一个值比较大,则将较大的值一前面的一个值交换位置。如果前面的数小于或者等于后面的数,就不交换。一次往下进行,直到比较完数组中最后的一个值。一趟比较之后,会得到数组中最大的一个值。下一趟比较就不用把之前已经确定的数(也就是一次排序中得到的最大数)加入下一趟比较中。经过上面的重复比较,就会得到一个有序数组。
第一趟排序:
-1,3,10,4,9
-1,3,10,4,9
-1,3,4,10,9
-1,3,4,9,10
第二趟排序在前面得到的数组的基础上,除去最大的数10,不用排序,再将其余的数进行再次排序。
第二趟排序
-1,3,4,9,10
-1,3,4,9,10
-1,3,4,9,10
可以看到第二趟排序没有发生任何的位置交换,所以我们做出一些简单的优化,即检测下一趟排序没有任何交换位置的变化,直接跳出循环,大大减少了程序运行的时间
代码实现
package cn.mrlij.sort;
import java.util.Arrays;
/**
* 冒泡排序及优化
* @author dreamer
*
*/
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {3,-1,6,4,9};//待排序数组
int temp;//临时变量,用于保存排序要交换 的值
boolean flag = false;
for(int i = 0;i<arr.length-1;i++) {
for(int j = 0;j<arr.length-1-i;j++) {
if(arr[j]>arr[j+1]) {
flag = true;
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
System.out.println("第"+(i+1)+"排序之后是:"+Arrays.toString(arr));
if(!flag) {
break;
}else {
flag = false;
}
}
}
}