【八大排序算法Python实现】基数排序

博客代码是博主想复习下排序算法然后手打的,已经过调试。若还有错误请指出!

 

一、基数排序

 

算法思想:

平均           最坏            最好        空间     稳定性      复杂性
O(dn)  O(dn))   O(dn)   o(dn)   稳定       较复杂
1、时间复杂度
count * length;其中 count 为数组元素最高位数,length为元素个数;所以时间复杂度:O(n * d)

2、空间复杂度
空间复杂度是使用了两个临时的数组:10 + length;所以空间复杂度:O(n)。

 

算法稳定性

在基数排序过程中,每次都是将当前位数上相同数值的元素统一“装桶”,并不需要交换位置。所以基数排序是稳定的算法。
 

 

 

 Python代码

def max_bit(input_list):
    '''
    函数说明:求出数组中最大数的位数的函数
    Parameters:
        input_list - 待排序列表
    Returns:
        bits-num - 位数
    '''
    max_index = 0
    for i in range(1,len(input_list)):
        if input_list[i] > input_list[max_index]:
            max_index = i
    max = input_list[max_index] # 得到最大的数
    bit = 0
    while max:
        max //= 10
        bit += 1
    return bit

def redix_sort(input_list):
    the_max_bit = max_bit(input_list) # 得到数组中最大数的位数的函数
    for i in range(the_max_bit): # 排序轮数等于数组中最大数的位数
        ten_buckets = [ [] for i in range(10) ]  # 因为每一位数字都是0~9,故建立10个桶
        for num in input_list:
            bucket_num = int(num / 10**i % 10) # 如去百位上的数,即第三轮排序,此时i=2,如数字int(520 / 10**2 % 10) = 5
            ten_buckets[bucket_num].append(num) # 将数字装进对应编号的桶
        input_list = [num for bucket in ten_buckets for num in bucket ] # 按桶顺序取出
    return input_list

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值