
基数排序是一种基于计数排序原理的整数排序算法。它将待排序的整数按位进行分组,然后分别对每一组进行排序,最终实现整个序列的排序。具体步骤如下:
1. 找出序列中最大数,并确定最大数的位数。
2. 从最低位(或最高位,视 MSD 或 LSD 基数排序)开始,将所有数的同一数位放入桶中。使用计数排序对桶中的元素进行排序。
3. 按照数位的顺序重复步骤 2。
基数排序的时间复杂度为 O(nk),其中 n 是元素个数,k 是元素位数。
稳定性是基数排序的一个重要特性,因为它保证了在排序过程中,相等元素的相对位置不变。这是由于排序过程对每个数位进行独立处理。
算法示意图可直观展示基数排序的过程。
代码实现中,首先定义一个函数 `getMax` 用于查找序列最大值。接下来,通过 `countSort` 函数对每个数位进行排序。在 `countSort` 函数中,使用计数排序原理,通过前缀和维护桶中元素的相对顺序,从而实现排序。最后,使用 `radixSort` 函数按位数进行排序。
举例说明 `countSort` 函数实现:假设我们有数字 123、213、231,对个位数排序。数组 `count` 记录个位数出现次数,通过前缀和计算出每个位置的正确插入位置,确保排序结果正确。
排序过程通过 `radixSort` 函数实现,依次对每个数位进行排序,直到所有数位都排序完成。
基数排序的优点是:稳定、线性时间复杂度、适用于整数排序。
缺点包括:不适用于非整数类型排序、空间复杂度相对较高。
宇宙安全声明:如有错误或不妥之处,欢迎指正。