title: 基数排序
date: 2024-7-25 14:29:53 +0800
categories:
- 排序算法
tags: - 排序
- 算法
- 基数排序
description: 基数排序(radix sort)的核心思想与计数排序一致,也通过统计个数来实现排序。在此基础上,基数排序利用数字各位之间的递进关系,依次对每一位进行排序,从而得到最终的排序结果。
math: true
基数排序
基数排序(Radix Sort)是一种非比较型整数排序算法。它通过将整数按位数分组排序,从最低有效位到最高有效位,或者从最高有效位到最低有效位,依次进行排序,从而实现最终的排序结果。
基数排序的原理
基数排序是一种稳定的排序算法,适用于整数排序。其主要思想是将整数按位数分组,从最低有效位开始,一次对每个位数进行计数排序(Counting Sort),最终得到有序数组。
两种实现方式
- LSD(Least Significant Digit):从最低有效位开始排序,逐步向最高有效位进行。
- MSD(Most Significant Digit):从最高有效位开始排序,逐步向最低有效位进行。
图示
基数排序的步骤
- 确定最大位数:找到数组中最大数的位数,以确定需要进行几轮排序。
- 逐位排序:从最低有效位开始,对每个位进行计数排序。
- 合并结果:每次排序完成后,合并结果进行下一轮排序,直到所有位数排序完成。
示例
为什么从最低位开始排序?
在连续的排序轮次中,后一轮排序会覆盖前一轮排序的结果。举例来说,如果第一轮排序结果 a < b ,而第二轮排序结果 a > b,那么第二轮的结果将取代第一轮的结果。由于数字的高位优先级高于低位,因此应该先排序低位再排序高位。
复杂度分析
相较于计数排序,基数排序适用于数值范围较大的情况,但前提是数据必须可以表示为固定位数的格式,且位数不能过大。例如,浮点数不适合使用基数排序,因为其位数 k k k 过大,可能导致时间复杂度 O ( n k ) ≫ O ( n 2 ) O(nk) \gg O(n^2) O(nk)≫O(n2) 。
-
时间复杂度为 O ( n k ) O(nk) O(nk)、非自适应排序:设数据量为 n n n、数据为 d d d 进制、最大位数为 k k k ,则对某一位执行计数排序使用 O ( n + d ) O(n + d) O(n+d) 时间,排序所有 k k