当前位置:首页 > 编程技术 > 正文

如何按基数排序

如何按基数排序

基数排序(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是数字的最大位数。它是一种稳定的排序算法,且不使用额外的内存空间,因此适用于大规模数据的排序。

最新文章