计数排序(11.13)

计数排序的的动画如图所示:

 第一步:我们首先需要找到需要排序的列表最大数和最小数 

 第二步:根据求出来的最大数与最小数计算出中间数组的长度

计算公式:len=max-min+1

求出长度后我们还需要知道偏移量为多少:偏移量=min

第三步:创建中间列表s1,长度为len

第四步:将原列表的数取出并进行计数

i表示为中间从0开始到中间列表最大长度的数值

i-min表示取出的原列表数值减掉偏移量而产生的下标,

s[i-min]+=1整体式子表示在i-min的元素数量加一

第五步:创建排序列表,并将中间列表中的数值取出

 s2 = [0]*z表示排序列表,长度跟排序前列表长度相同并将元素值全部赋为0

x表示排序列表的下标,未开始之前赋值为0

创建循环将中间列表值取出并放到排序列表中去

for i in range(0,len)遍历整个中间列表

        for j in range(0,s[i])内层循环表示取出元素次数,当s[i]为0时跳出内层循环,继续进行遍历中间列表,如果不为0,则进行s2[x] = i + min,x+=1的步骤,具体操作观看注释。

每个步骤的显示结果如下:

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值