冒泡排序,可能是大多数人接触的第一个排序算法。C语言教程里对此有详细描述。冒泡算法本身不难,但写不好的话,很容易写成效率最差的选择排序,介绍选择排序的时候会分析一下原因。
条件:
数据量较小
原理:
吹泡泡。内外两层,一趟确定一个元素的位置。这里总结了一个速记法则”外后内浅(前)”,解释一下就是最外层的循环从最后面开始,内层的循环从前面开始。记下这个法则,以后就不容易写蹩脚了。
时间复杂度:
没什么好说的,n^2。
笔面试出现的频率:
从来没有考过。
实现:
public class BubSort {
/**
* <p>name: main</p>
* <p>description: </p>
* <p>return: void</p>
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] a = { 1, 5, 8, 4, 7, 3, 0, 2, 9, 6, 11, 13, 12, 141, 14, 15, 17,
16, 18, 21, 20, 19, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
34, 35, 36, 40, 39, 38, 37 };
bubSort(a);
print(a);
}
public static void print(int[] array) {
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + ", ");
}
System.out.println();
}
/** 核心:外后内浅 */
public static void bubSort(int[] array) {
for (int i = array.length - 1; i > 0; i--) {
for (int j = 0; j < i; j++) {
if (array[j] > array[j + 1]) {
//这样的写法高效,但有缺陷,两个相等的数,交换的结果是0
// array[j] ^= array[j + 1];
// array[j + 1] ^= array[j];
// array[j] ^= array[j + 1];
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
}