前言

在算法学习的道路上,排序算法始终是绕不开的核心知识点。从基础的冒泡、选择排序,到进阶的快速、归并排序,每种算法都有其独特的适用场景。而桶排序,凭借其 “分而治之” 的巧妙思路和对特定场景的高效适配,常被称为 “天才般” 的排序算法。

不同于比较类排序算法,桶排序通过将数据分配到不同的 “桶” 中,再对桶内数据单独排序,最后合并结果,能在特定条件下实现线性时间复杂度。本文将从桶排序的核心原理出发,结合 Python 代码实战,带你彻底掌握这一高效算法。

一、桶排序核心原理

1.基本思想

桶排序的核心逻辑可以概括为:分桶 排序 合并

  • 分桶:根据预设的规则,将待排序数据均匀分配到若干个空的 “桶” 中;
  • 桶内排序:对每个非空的桶,使用合适的排序算法(如快速排序)或递归使用桶排序完成排序;
  • 合并结果:将所有非空桶中的数据,按桶的顺序依次取出,拼接成最终的有序序列。

2.特殊形式:基数排序

本文实战的是桶排序的基数排序实现,专门用于整数排序。它以 “数位” 为依据分桶,从最低位(个位)最高位,逐位对数据进行分桶和合并,最终实现整体有序。

核心规则:

  • 定义 0-9 共 10 个桶,分别对应数字 0-9;
  • 从个位开始,将数字按当前位的数值放入对应桶中,再按桶的顺序取出;
  • 依次处理十位、百位、千位…… 直到处理完最大数字的最高位。

例如:   [91822,96543]

  • 处理个位:91822的个位数是2→将91822放到2 号桶,96543的个位数是3→将96543放到3 号桶,取出后为 [91822, 96543]
  • 处理十位:91822的个位数是2→将91822放到2 号桶,96543的个位数是4→将96543放到4 号桶,取出后仍为 [91822, 96543]
  • 以此类推,持续处理直到最高位,最终完成排序

二、Python代码详解

经过上面的分析,我们要先创建0~9的10个桶

然后按当前位分桶,提取出当前位的数字,将该数放入对应桶中,再清空原先数组,依次将桶里的数放入新数组中

最后写一个循环,只要数组里最大数整除位数大于0,则一直排序,因此初始化位数为1

整体代码展示:

五、总结

桶排序(基数排序)凭借 “分而治之” 的思想,在整数排序场景中展现出极高的效率,是算法学习和工程实践中不可或缺的工具。本文从原理到代码,详细拆解了基数排序的实现过程,结合 Python 实战让你快速掌握核心逻辑。读者可以自行写出包含负数的桶排序  (提示:先变成正数进行比较,再变回负数)

更多推荐