基数排序(Radix Sort)是一种非比较排序算法,它根据数字的每一位(从最低位到最高位)进行排序,具体来说,它是将所有待排序的数字统一为同样的数位长度,然后从最低位开始,依次对每个数位进行排序,最后将所有数字按照数位从低到高的顺序合并成一个有序数组。
基数排序的主要优点是,它不需要比较相邻的元素,而是通过分配和收集数字的每一位来进行排序。这使得基数排序在处理大量数据时非常高效,尤其是在数据范围很大或数据类型不支持随机访问时。
基数排序的基本思想如下:
- 将所有待比较的数字统一为同样的数位长度,数位较短的数字前面补零。
- 从最低位开始,依次进行一次排序。对于每一位,将待排序的数字分配到相应的桶中,然后将各个桶中的数字收集起来,得到有序数组。
- 继续对下一位进行排序,直到最高位。
下面是一个使用 Python 实现的基数排序示例代码:
def radix_sort(arr):
max_val = max(arr)
exp = 1
while max_val // exp > 0:
buckets = [0] 10
for i in range(len(arr)):
buckets[arr[i] // exp % 10] += 1
idx = 0
for i in range(10):
while buckets[i] > 0:
arr[idx] = i
idx += 1
buckets[i] -= 1
exp = 10
return arr
CopyCopy
当需要对大规模数据进行排序,尤其是数据范围很大或数据类型不支持随机访问时,可以考虑使用基数排序。例如,在 JavaScript 中,由于它的数组对象不支持随机访问,因此基数排序可以比其他排序算法更高效。