如何按基数排序
- 编程技术
- 2025-01-25 06:07:57
- 1
基数排序(Radix Sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数进行比较排序。基数排序适用于整数排序,特别是当键值分布范...
基数排序(Radix Sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数进行比较排序。基数排序适用于整数排序,特别是当键值分布范围不均匀时,其效率比归并排序、快速排序等算法更高。
以下是基数排序的基本步骤:
1. 确定最大数
找到数列中最大的数,确定该数的位数,即确定排序需要进行的轮数。
2. 初始化
创建10个队列(通常使用链表或数组实现),对应数字0到9。
3. 排序过程
对于每一位的排序,重复以下步骤:
从最低位开始(个位),到最高位结束(最高位)。
按照当前位(例如个位)的值,将所有数字分配到对应的队列中。
将所有队列中的数字按照队列顺序连接起来,形成新的数列。
4. 重复排序
重复步骤3,直到所有位都排序完毕。
示例代码(Python)
```python
def counting_sort_for_radix(arr, position):
n = len(arr)
output = [0] n
count = [0] 10
计算每个队列的元素个数
for i in range(n):
index = (arr[i] // position) % 10
count[index] += 1
累加计数
for i in range(1, 10):
count[i] += count[i 1]
构建输出数组
i = n 1
while i >= 0:
index = (arr[i] // position) % 10
output[count[index] 1] = arr[i]
count[index] -= 1
i -= 1
将排序后的数组复制回原数组
for i in range(n):
arr[i] = output[i]
def radix_sort(arr):
获取最大数的位数
max_num = max(arr)
position = 1
while max_num // position > 0:
counting_sort_for_radix(arr, position)
position = 10
示例
arr = [170, 45, 75, 90, 802, 24, 2, 66]
radix_sort(arr)
print(arr) 输出:[2, 24, 45, 66, 75, 90, 170, 802]
```
这个示例中,我们首先定义了一个辅助函数`counting_sort_for_radix`,用于对数组的特定位置进行计数排序。然后,`radix_sort`函数通过递增`position`来对数组的每一位进行排序。
基数排序的时间复杂度为O(nk),其中n是数组的长度,k是数字的最大位数。它是一种稳定的排序算法,且不使用额外的内存空间,因此适用于大规模数据的排序。
本文链接:http://xinin56.com/bian/331454.html