冒泡排序是一种典型的交换排序,类似于水中冒泡,较大的数沉下去,较小的数慢慢冒起来,假设从小到大,即为较大的数慢慢往后排,较小的数慢慢往前排。
冒泡排序的思想就是利用的比较交换,利用循环将第 i 小或者大的元素归位,归位操作利用的是对 n 个元素中相邻的两个进行比较,如果顺序正确就不交换,如果顺序错误就进行位置的交换。通过重复的循环访问数组,直到没有可以交换的元素,那么整个排序就已经完成了。
代码实现:
/**
* 冒泡排序
* @param arr
*/
private static void bubbleSort(int[] arr) {
boolean flag = false;
if(arr==null || arr.length < 2 ){
return;
}
for (int i = 0; i < arr.length - 1; i++) {
System.err.println("第"+(i+1)+"趟比较");
for (int j = 0; j < arr.length - i -1; j++) { // 这里说明为什么需要-1
if (arr[j] > arr[j + 1]) {
flag = true;
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
System.err.print("第"+(j+1)+"次比较: [");
for (int z = 0; z < arr.length; z++) {
System.err.print(arr[z]+" ,");
}
System.err.println("]");
}
System.err.println("第"+(i+1)+"次比较完成");
for (int z = 0; z < arr.length; z++) {
System.err.print(arr[z]+" ");
}
if(!flag)
break;
flag = false;
}
}