前言
冒泡排序(Bubble Sort),像水底的气泡一样不断往上冒,谁的能量大谁就最出人头地。
基本思路
(从小到大)从第一个元素开始与相邻的下一个元素比较大小,如果开始的元素大于下一个相邻的元素就交换位置;接着从第二个元素开始向下一个元素开始比较,重复步骤。
(如果上面的文字你没看懂也没关系,看下面的图解)
图解
第一轮:8>7,交换位置,此时排序789436;继续比较8<9,不用交换;9>4,交换位置,此时排序784936;9>3,交换位置,此时排序:784396;9>6,交换位置,784369
第二轮:7<8,不用交换;8>4,交换位置748369;8>3,交换位置:743869;8>6,交换位置:743689;8<9,不用交换(由于第一轮已经排出最大的了,所以步骤可以省略);
第三、四、五、六轮:比较方式如上,(由于第五轮比较完成后只剩一个数字,故第六步可以省略)。
再次举一个列子:
看了这个图解再回过头看下思路
代码
JAVA版本
import java.util.Arrays;
public class BubbleSort {
public static void main(String []args) {
int[] array = new int[]{8,7,9,4,3,6};
sort(array);
System.out.print(Arrays.toString(array));
}
public static void sort(int[] array){
for(int i=0;i<array.length;i++){
//看看上面的可省略步骤,试着优化一下
for(int j = 0;j<array.length-1;j++){
if(array[j]>array[j+1]){
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
}
}
注意,千万不要死记代码,很容易忘记,算法思想远比代码重要。
还记得上面提到过的可以省略的步骤吗?理解原理后试着对着面的代码进行优化吧!
效率
时间复杂度: O() 空间负责度: O(1) 稳定性:稳定
插入排序请参考:高效理解排序之——插入排序-含JAVA代码(简洁明了,非无脑COPY)
本章关键字总结:气泡 相邻 交换