vlambda博客
学习文章列表

最简单的排序: 冒泡排序

1. 简介

冒泡排序是我记事以来学的第一个排序算法

讲实话在我的程序员生涯中, 我从来就没有见到过哪用冒泡排序的

作为Java程序员使用最多的就是JDK的排序Collections.sort()Arrays.sort()

但是JDK实现的排序算法主要是插入和快排以及归并, 并不是冒泡

为什么JDK不实现冒泡排序

JDK关注的是的是执行效率以及兼容性,

所以JDK的排序算法为了效率和兼容性写得有点晦涩难懂

为什么要学习冒泡排序

因为冒泡排序足够简单, 冒泡排序作为一个排序算法, 它的实现思路非常契合人类的思维

它能让一个刚学习编程的人深刻得体会到一个 时间复杂度的算法长什么样子


2. 实现

伪代码

BUBBLE_SORT(A)
  for i = A.length to 0
    for j = 0 to i
      if A[j] > A[j+1]
        swap(A[j], A[j+1])

代码写了两层循环

主要逻辑在内层循环, 内层循环总是将此次遍历最大的数移到 最后面 i 的位置

Java代码实现

用Java代码来实现

public static void bubbleSort(int[] arr) {
    for (int i = arr.length - 1; i > 0; i--) {
        for (int j = 0; j < i; j++) {
            if (arr[j] > arr[j + 1]) {
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}

看看效果

非科班码农
算法可视化: 冒泡排序 感受O(n²)复杂度的算法 https://www.cs.usfca.edu/~galles/visualization/Algorithms.html


指令共执行了多少条?

大约是 条, 所以时间复杂度是