算法-冒泡排序

2018/04/02 算法 冒泡排序 Java
  本文为「原创」内容,如需转载请注明出处!             
本文共 936 字,需 11 分钟阅读
  1. 算法可视化:连接
  2. 时间复杂度,平均:\(O(n^2)\),最好:\(O(n)\),最坏:\(O(n^2)\)。
  3. 空间复杂度:\(O(1)\)
  4. 稳定性:稳定
  5. 图片来源:啊哈磊

算法思想

每次比较相邻元素,如果它们的顺序错误则将它们交换过来。
该算法的思想非常简单,每次都能将一个最大或者最小的泡泡冒到最上面。

比如,我们需要将 12 35 99 18 76 这 5 个数从大到小排序。

  1. 12 与 35 比较,发现 12 < 35 交换后为:35 12 99 18 76。
  2. 12 与 99 比较,发现 12 < 99 交换后为:35 99 12 18 76。
  3. 按上述顺序进行下去,则可以使得最小元素归位:35 99 18 76 12。
  4. 一次可以归位一个元素,再进行 4 次 上述操作,则 5 个数都能归位 bubble-sort

实现

/**
 * 冒泡排序
 *
 * @author ychost
 * @date 2018-4-2
 */
public class BubbleSort {
    public static void sort(int[] array) {
        for (int i = 0; i < array.length; i++) {
            //这里 array.length - 1 - i 
            //每次进入循环的时候后面的 i 个元素都归位了
            for (int j = 0; j < array.length - 1 - i; j++) {
                if (array[j] > array[j + 1]) {
                    swap(array, j, j + 1);
                }
            }
        }
    }

    static void swap(int[] array, int i, int j) {
        int tmp = array[i];
        array[i] = array[j];
        array[j] = tmp;
    }
}

搜索

    文章目录