每日智识
柔彩主题三 · 更轻盈的阅读体验

排序方法:从冒泡到快速,搞懂这些就够了

发布时间:2025-12-14 04:44:24 阅读:489 次

早上赶地铁的时候,队伍乱糟糟的,有人插队,有人站错位置。如果能把所有人按身高从矮到高排个序,是不是就井然有序了?这其实就是排序——把一堆无序的数据重新排列成特定顺序的过程。

冒泡排序:最基础的入门法

想象你在整理一排书,相邻两本如果顺序不对,就交换位置。冒泡排序就是这样,一遍遍扫描列表,每次把最大的那个“浮”到最后。

虽然效率不高,但逻辑简单,适合初学者理解排序的基本思想。

def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
    return arr

选择排序:每次都挑最小的

就像你每天挑衣服,总想选最合适的那件。选择排序每轮都在未排序部分找出最小值,放到已排序部分的末尾。

它不像冒泡那样频繁交换,而是记录位置再交换,代码更干净一点。

插入排序:像打扑克时理牌

你抓了一手牌,习惯性地一边摸牌一边调整顺序。插入排序就是这么干的:每次取出一个元素,插入前面已经排好序的部分中合适的位置。

数据量小或者接近有序时,它表现挺不错。

归并排序:分而治之的稳定派

面对一大叠发票要排序,你可以把它分成两半,各自排好,再合并起来。归并排序用的就是这个思路——递归拆分,再有序合并。

它的优势在于稳定性强,时间复杂度始终是 O(n log n),适合处理大量数据。

快速排序:效率之王

找个基准数,比它小的放左边,大的放右边,然后对左右两边递归操作。快排的核心在于“分区”,平均情况下速度最快。

你写个小程序处理几千条用户数据,用快排基本秒出结果。

def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[len(arr)//2]
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
    return quick_sort(left) + middle + quick_sort(right)

怎么选合适的排序方法

小数据量直接上插入排序,简单直接;要求稳定就用归并;追求速度首选快排;学习练手可以从冒泡开始。

实际开发中,Python 的 sorted() 和 JavaScript 的 sort() 都是混合策略,底层可能是快排、Timsort 这类优化过的算法。

理解这些排序方法,不只是为了应付面试题。当你在处理表格、筛选商品价格、甚至安排日程时,脑子里有这些逻辑,写代码自然更顺。