1. 基本思想:
两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,直到没有反序的数据元素为止。
2. 排序过程:
设想被排序的数组R[1..N]垂直竖立,将每个数据元素看作有重量的气泡,根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R,凡扫描到违反本原则的轻气泡,就使其向上"漂浮",如此反复进行,直至最后任何两个气泡都是轻者在上,重者在下为止。
【示例】:
两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,直到没有反序的数据元素为止。
2. 排序过程:
设想被排序的数组R[1..N]垂直竖立,将每个数据元素看作有重量的气泡,根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R,凡扫描到违反本原则的轻气泡,就使其向上"漂浮",如此反复进行,直至最后任何两个气泡都是轻者在上,重者在下为止。
【示例】:
原始数列: 49 38 65 97 76 13 27 49
第一趟: 38 49 65 76 13 27 49 97
第二趟: 38 49 65 13 27 49 76 97
第三趟: 38 49 13 27 49 65 76 97
第四趟: 38 13 27 49 49 65 76 97
第五趟: 13 27 38 49 49 65 76 97
第六趟: 13 27 38 49 49 65 76 97
import java.util.Arrays; /** * @author zhuangguoshuai * @description 冒泡排序算法。 * @create 2017-10-18 14:40 **/ public class BubbleSort { /** * 遍历数组相邻元素进行比较 * @param array */ public static void bubble(int[] array) { for(int i = array.length - 1; i > 0; i --) { for(int j = 0; j < i; j ++) { if (array[j] > array[j+1]) { swap(array, j, j+1); } } } } /** * 将数组的m和n位置上的元素互换 * @param array * @param m * @param n */ private static void swap(int[] array, int m, int n) { int tmp = array[m]; array[m] = array[n]; array[n] = tmp; } public static void main(String[] args) { int[] array = new int[]{49, 38, 65, 97, 76, 13, 27,49}; bubble(array); System.out.println(Arrays.toString(array)); } }
算法复杂度:
平均O(n^2) 最坏O(n^2) 额外空间O(1)