python实现基数排序

排序算法:
python实现基数排序
python实现归并排序
python实现交换排序
python实现选择排序
python实现插入排序
python实现桶排序
基数排序
思想:采用关键字排序思想,即基于关键字各位的大小进行排序,借助”分配“和“收集”两种操作对逻辑关键字进行排序。
实现:将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。
如图所示,最左端为输入,其余各列表示了对各个不断递增的有效位连续排序后的情况,阴影部分表述当前正被排序的数位。
在这里插入图片描述
代码

def jishu_sort(array):
    #获取最多需要被排序几次
    times=len(str(max(array)))

    for i in range(times):
        #分配
        bukt=[[] for _ in range(10)]
        for eachnum in array:
            weishu=eachnum//(10**i)%10
            bukt[weishu].append(eachnum)
        #收集
        array=[]
        for i in range(10):
            array+=bukt[i]


        print(array)


if __name__ == '__main__':
    array=[12,34,767,45,343,676,454,49]
    jishu_sort(array)
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Python基数排序是一种非比较型的排序算法,它通过将待排序的数据按照位数进行分桶和合并来实现排序。基数排序实现可以参考以下代码: ```python # coding=utf-8 def radix_sort(array): max_num = max(array) place = 1 while max_num >= 10**place: place += 1 for i in range(place): buckets = [[] for _ in range(10)] for num in array: radix = int(num / (10**i) % 10) buckets[radix].append(num) j = 0 for k in range(10): for num in buckets[k]: array[j] = num j += 1 return array if __name__ == '__main__': array = [25, 17, 33, 17, 22, 13, 32, 15, 9, 25, 27, 18] print(radix_sort(array)) ``` 在基数排序中,首先找到待排序列表中最大的数,确定需要进行的位数(即最大数的位数)。然后,按照从低位到高位的顺序,将数据分桶并合并。在分桶时,根据当前位上的数值,将数据放入对应的桶中。在合并桶时,按照从0到9的顺序,依次将每个桶中的数据取出来,放回原数组中。这样,在每一轮分桶和合并的过程中,数据的相对次序是不会发生变化的,所以基数排序是一种稳定的排序算法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Python实现基数排序](https://blog.csdn.net/weixin_43790276/article/details/107398348)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值