目录1.1 基本介绍1.2 演示冒泡过程1.3 实现代码1.4 优化1.5 优化后的实现代码1.1 基本介绍冒泡排序Bubble Sorting的基本思想是通过对待排序序列从前向后从下标较小的元素开始,依次比较相邻元素的值若发现逆序则交换使值较大的元素逐渐从前移向后部就象水底下的气泡一样逐渐向上冒。1.2 演示冒泡过程小结上面的图解过程:(1) 一共进行 数组的大小-1 次 外面的循环(2)每一趟排序的次数在逐渐的减少1.3 实现代码import java.util.Arrays; public class BubbleSort { public static void main(String[] args) { int[] array {5,8,1,-1,2}; BubbleSort bSort new BubbleSort(); bSort.bubbleSort(array); System.out.println(Arrays.toString(array)); } public void bubbleSort(int[] array) { for (int i 0; i array.length - 1; i) { for (int j 0; j array.length - 1 - i; j) { if (array[j] array[j1]) { int temp array[j1]; array[j1] array[j]; array[j] temp; } } } } }测试结果[-1, 1, 2, 5, 8]1.4 优化1因为排序的过程中各元素不断接近自己的位置如果一趟比较下来没有进行过交换就说明序列有序因此要在排序过程中设置一个标志 flag 判断元素是否进行过交换。从而减少不必要的比较。2还可以把array.length - 1提到初始化模块中去没必要每次循环都求一次。3还可以把临时变量temp放在初始化模块中去没必要每次循环都声明一次。4交换还可以使用 ^ 异或进行交换这样交换更快我测试8万个数据比不优化前15秒左右快5秒左右仅在本人电脑是这样。这种方法适用于整型数据类型不需要临时变量。1.5 优化后的实现代码import java.util.Arrays; public class BubbleSort { public static void main(String[] args) { int[] array {5,8,1,-1,2}; BubbleSort bSort new BubbleSort(); bSort.bubbleSort(array); System.out.println(Arrays.toString(array)); } public void bubbleSort(int[] array) { for (int i 0,m array.length - 1; i m; i) { boolean falg false; for (int j 0,n m - i; j n; j) { if (array[j] array[j1]) { falg true; array[j1] ^ array[j]; array[j] ^ array[j1]; array[j1] ^ array[j]; } } if (!falg) { break; } } } }测试结果[-1, 1, 2, 5, 8]最后欢迎各位评论留言讨论如有发现错误和不足的地方请各位大佬指出。