互联网面试突击算法-基数排序

本文详细介绍了基数排序算法的工作原理,包括其基于位数的分组和排序过程,以及如何利用计数排序作为辅助算法。特别强调了该算法适用于整数排序且在元素位数较小的情况下效率较高。
摘要由CSDN通过智能技术生成

基数排序是一种非比较的排序算法,它根据元素的位数进行排序。它将整数按照位数(个位、十位、百位等)进行分组,然后分别对每个位数进行稳定的排序。通过多次按位排序,最终可以得到有序的结果。

基数排序的思想是从低位到高位进行排序。具体步骤如下:

  1. 根据待排序的元素确定最大位数,假设为d位数。
  2. 从最低位开始,对所有元素按照该位的值进行排序。可以使用稳定的排序算法,如计数排序或桶排序。
  3. 排序完成后,将排序结果覆盖原数组。
  4. 重复步骤2和步骤3,依次对更高位进行排序,直到最高位(d位)排序完成。
  5. 最终得到的数组就是有序的结果。

基数排序的关键在于对位数的排序,而不是对整个元素进行比较。它的时间复杂度是O(d*(n+b)),其中n是数组的长度,d是最大位数,b是基数(每个位数的取值范围)。基数排序通常适用于待排序元素的位数相对较小的情况。

下面是基数排序的示例代码:

def countingSort(arr, exp):
    n = len(arr)
    output = [0] * n
    count = [0] * 10

    for i in range(n):
        index = arr[i] // exp
        count[index % 10] += 1

    for i in range(1, 10):
        count[i] += count[i - 1]

    i = n - 1
    while i >= 0:
        index = arr[i] // exp
        output[count[index % 10] - 1] = arr[i]
        count[index % 10] -= 1
        i -= 1

    for i in range(n):
        arr[i] = output[i]


def radixSort(arr):
    max_value = max(arr)
    exp = 1

    while max_value // exp > 0:
        countingSort(arr, exp)
        exp *= 10


# 测试代码
arr = [170, 45, 75, 90, 802, 24, 2, 66]
radixSort(arr)
print("排序后的数组:")
print(arr)

在上述示例中,我们使用计数排序作为基数排序的辅助排序算法。首先,我们确定最大值,然后从个位开始,依次对每个位数进行计数排序。重复这个过程直到最高位排序完成。最后,我们得到了有序的数组。

需要注意的是,基数排序适用于整数排序,而对于字符串或其他类型的数据,我们需要将其转化为整数再进行排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值