python之基数排序的实现

  • Post category:Python

基数排序算法

基数排序算法是一种非比较排序算法,它的基本思是将待排序的元素按照位数切割成不同的数字,然后按照每个位数分别进行排序。具体步骤如下:

  1. 找出待排序数组中最大的数字,并确定其位数。

  2. 从最低位开始,按照每个位数进行排序。具体做法是,将待排序数组中的数字按照当前位数的值进行分组,然后按照每个组的顺序重新排列数组。

  3. 重复上述操作,直到将所有的位数都考虑完毕。

Python实现

以下是一个示例代码,用于实现上述步骤:

def radix_sort(arr):
    max_num = max(arr)
    digit = 0
    while max_num > 0:
        max_num //= 10
        digit += 1
    for i in range(digit):
        buckets = [[] for _ in range(10)]
        for num in arr:
            buckets[(num // 10**i) % 10].append(num)
        arr = [num for bucket in buckets for num in bucket]
    return arr

这个代码定义一个名为radix_sort的函数,它接受一个数组作为输入,并返回一个排序后的数组。函数使用两个嵌套的循环来实现基数排序算法。外层循环控制排序的位数,内层循控制每一位中数字的分组和排序。

示例1:对整数数组进行排序

让我们使用述代码对一个整数数组进行排序我们将以下代码:

arr = [64, 34, 25, 12, 22, 11, 90]
sorted_arr = radix_sort(arr)
print(sorted_arr)

这个代码定义了一个整数数组arr,并将其传递给radix_sort函数进行排序。排序后,我们将结果打到控制台。

输出结果:

[11, 12, 22, 25, 34, 64, 90]

这个结果表示,我们成功地使用基数排序算法对整数数组进行了排序。

示例2:对字符串数组进行排序

让我们使用上述代码对一个字符串数组进行排序。我们将以下代码:

arr = ['apple', 'banana', 'orange', 'pear', 'grape']
sorted_arr = radix_sort(arr)
print(sorted_arr)

这个代码定义了一个字符串数组arr,并将其传递给radix_sort函数进行排序。排序后,我们将结果打印到控制台。

输出结果:

['apple', 'banana', 'grape', 'orange', 'pear']

这个结果表示,我们成功地使用基数排序算法对字符串数组进行了排序。

总结

基数排序算法是一种非比较排序算法,它的实现相对较为复杂。在Python中,我们可以使用嵌套循环和桶来实现基数排序算法。无论是对整数数组还是字符串数组进行排序,基数排序算法都可以很好地工作。