返回

手写算法,一记就忘?基数排序让记忆变容易

前端

曾经对编写算法望而生畏吗?觉得算法都是复杂的符号和难以理解的流程吗?别担心,今天我们就来认识一种简单易懂的排序算法——基数排序,让你手写算法不再成为难题!

基数排序:用位数来排序

基数排序的巧妙之处在于,它不是直接比较数字的大小,而是逐位比较数字中各个位置上的数字。就如同我们小时候学习的竖式计算,基数排序也是从低位(个位)开始排序,然后依次比较高位(十位、百位...)。

例如,对于一组数字[543, 211, 324, 123, 432],基数排序会先按个位从小到大排序,得到[123, 211, 324, 432, 543]。然后按十位排序,得到[123, 211, 324, 432, 543],再按百位排序,得到[123, 211, 324, 432, 543]。最终,得到排序后的结果[123, 211, 324, 432, 543]。

手写基数排序:一步一步来

现在,让我们一步一步地手写基数排序算法:

def radix_sort(nums):
    max_num = max(nums)
    exp = 1
    while max_num // exp > 0:
        counting_sort(nums, exp)
        exp *= 10

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

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

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

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

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

在代码中,counting_sort函数负责按指定位数进行计数排序,而radix_sort函数则负责逐位进行基数排序。

总结:简单易记,应用广泛

基数排序以其简单易懂、易于实现的优点而著称。它特别适用于对大整数数组进行排序。在实际应用中,基数排序被广泛用于各种领域,如数据库管理、数据分析和财务计算。

现在,你已经掌握了基数排序的原理和实现,下次遇到排序问题时,不妨尝试一下这种简单高效的算法吧!