简介: 冒泡排序(Bubble Sort)是最为直观和易懂的排序算法之一,它的思想是前后比较,若前者大于后者就把前者和后者交换位置,就像一个重量大的泡泡一样,慢慢地浮至其他轻的泡泡之下。
Java代码:
public class BubbleSort {
public static void main(String[] args) {
int[] array = {7,5,3,8,4,1};
System.out.println("冒泡排序前:");
for(int arr:array){
System.out.print(arr+" ");
}
//冒泡排序
for(int i = 1; i < array.length;i ++){
//第一次循环,i=1,j作为下标从0开始
//循环比较(数组长度-1)次,即可全部比较完
for(int j = 0; j < array.length - i;j ++){
if(array[j] > array[j + 1]){
//前者比后者大,交换位置
int temp = array[j + 1];
array[j + 1] = array[j];
array[j] = temp;
}
}
}
//输出冒泡排序的结果
System.out.println("冒泡排序的结果为:");
for(int arr:array){
System.out.print(arr+" ");
}
}
}
结果:
动画演示:
https://www.cs.usfca.edu/~galles/visualization/ComparisonSort.html
思考:
1、第一轮for循环的作用是标识这是第几个要进行冒泡排序的数,如i=0时,表示这是对数组的第一个数进行冒泡排序,假如数组有5个数,就要进行4次冒泡排序,因为最后一个数无需排序,它一定是最小的了。
2、第二轮for循环的作用是定义比较的次数是多少次,如一个数组有5个数,那么在对以一个数进行冒泡排序时,需要比较(5-1)= 4次,第二个数进行比较时,需要比较3次。
3、若前者小于后者,并不是结束循环,而是用后者去和接下来的数比较。如数组3 2 4 1,3比较到4的时候,判断3小于4,所以不能进到if中,即把索引往下移给4,用4和接下来的数进行比较,这样的作用是一轮下来,一定能筛选出大数将其排序到后面。
4、冒泡排序是有缺点的:假如数组有n个元素,那么第一轮需要进行n-1次比较,第二轮需要n-2次比较,所以n-1轮后共比较
(n-1)+(n-2)+...+1 ~= n^2/2次,即算法的时间复杂度0与n^2成正比,所以大O表示法表示为O(n^2),是时间复杂度很大的一种排序算法。