📜  基数排序(1)

📅  最后修改于: 2023-12-03 15:37:48.829000             🧑  作者: Mango

基数排序

基数排序是一种非比较性排序算法,它根据记录的键值的每位数字来排序。时间复杂度为O(nk),其中n是排序元素个数,k是最大元素的位数。

实现思路

基数排序的实现需要用到桶,具体步骤如下:

  1. 找到待排序数组中最大的数,并确定它的位数;
  2. 从低位到高位依次排序,每次都按照当前位数(从右往左数)进行排序;
  3. 按照当前位数,将每个元素放入到对应的桶中;
  4. 将桶中的元素按照顺序依次复制到原数组中;
  5. 重复步骤2-4,直到所有位数都排序完毕。
代码实现
def radix_sort(arr):
    max_num = max(arr)
    length = len(str(max_num))
    for i in range(length):
        bucket = [[] for _ in range(10)]
        for num in arr:
            bucket[num // (10 ** i) % 10].append(num)
        arr = [num for bucket_list in bucket for num in bucket_list]
    return arr
时间复杂度

基数排序的时间复杂度为O(nk),其中n是排序元素个数,k是最大元素的位数。在实践中,当k不是很大时,基数排序的效率很高。