AlgoMooc

排序

17 / 28基础内容

数据结构动画

排序

加载中
正在加载动画引擎...

本课导读

排序是把数据排整齐的基本功。本课用最直观的冒泡排序讲清「比较 + 交换」的内核。

你将学到
  • 冒泡:相邻比较、大数往后冒
  • 为什么冒泡是 O(n²)
  • 更快的排序在「分治」一课

排序在做什么

排序就是把一组杂乱的数据,按照从小到大(升序)或从大到小(降序)的顺序重新排列。比如整理扑克牌,把乱序的牌按点数排好,这就是排序。

冒泡排序原理

冒泡排序的核心思想是:相邻比较,大数后移。就像水中的气泡,大的气泡会慢慢浮到水面。每一轮,从第一个元素开始,依次比较相邻的两个元素,如果前面的比后面的大,就交换它们。这样一轮下来,最大的数就会“冒”到最后面。重复这个过程,直到所有数都排好。

为什么是 O(n²)

冒泡排序的时间复杂度是 O(n²),其中 n 是数据个数。因为需要两层循环:外层循环 n-1 轮,内层循环每轮比较 n-1 次(逐渐减少)。总比较次数约为 n(n-1)/2,所以是平方级别。简单说,数据量翻倍,时间大约变成原来的4倍。

稳定性是什么

稳定性是指排序后,相等元素的相对顺序是否保持不变。冒泡排序是稳定的,因为当相邻元素相等时,我们不交换它们,所以相等元素的先后顺序不会改变。这在某些场景(如按多关键字排序)中很重要。

常见排序对照表

排序算法平均时间复杂度最坏时间复杂度空间复杂度稳定性
冒泡排序O(n²)O(n²)O(1)稳定
选择排序O(n²)O(n²)O(1)不稳定
插入排序O(n²)O(n²)O(1)稳定
快速排序O(n log n)O(n²)O(log n)不稳定
归并排序O(n log n)O(n log n)O(n)稳定
吴师兄提示:判断排序快慢,先数循环嵌套了几层。

学完练一练

把刚学的结构放进 LeetCode 题里用一次。

去图解题库实战