在基数排序中需要帮助

Posted

技术标签:

【中文标题】在基数排序中需要帮助【英文标题】:Need help in Radix sort 【发布时间】:2016-08-16 15:45:26 【问题描述】:

我在创建列表时遇到问题 我完成了基数排序的逻辑部分。 代码如下:

import math

a = [4, 15, 7, 3, 6, 22, 45, 82]

a1 = [[] for _ in xrange(len(a))]
a2 = [[] for _ in xrange(len(a))]
a3 = [[] for _ in xrange(len(a))]
a4 = [[] for _ in xrange(len(a))]
b = [[] for _ in xrange(10)]
b2 = [[] for _ in xrange(10)]
d=len(str(max(a)))



[str(item).zfill(d) for item in a]

print a

这部分代码将在数字前添加零,以便所有数字的长度与没有最大数字的长度相同

它给a = [ 04 , 15 , 07 , 03 , 06 , 22 , 45 , 82 ]

for x in xrange(0,len(a)) :
   a1[x].append(a[x]%10)
   print a1 

print '\n'

这将保存每个数字的结束数字 如下

a1 = [[4], [5], [7], [3], [6], [2], [5], [2]]

在下一部分中,如果bucket no 与no 的末尾数字匹配。 然后没有。具有该数字将存储在其中。

i=0
for x in xrange(0,len(a)) :    
  for u in range(0,len(a)) :
    if a1[u]==[i] :
      b[x].append(a[u])
  i=i+1


for u in range(0,len(a)) :
   print b[u] 

输出如下:

[]
[]
[22, 82]
[3]
[4]
[15, 45]
[6]
[7]

这部分会选号。从桶号开始。零到桶号。 10

for k in range(0,len(a))  :      
 l=len(b[k])
 for t in range(0,l) :
     a2[k]=b[k][t]
     print a2[k]

a2 是

22
82
3
4
15
45
6
7

但是当我打印它时,就像这样-

print a2[0]

它给了

[]

我不想将空值存储在该 a2 列表中 如何避免?

我知道我必须使用“如果桶是空的,不要放不,继续循环”这样的条件 我不知道如何为此编写代码。

我想我需要添加

if len(b[k][t])==0 :
       continue
else :
    a2[k]=b[k][t]
    print a2[k]

但它不起作用

Traceback (most recent call last):
  File "prog.py", line 39, in <module>
TypeError: object of type 'int' has no len()

【问题讨论】:

能有第39行的内容吗? 第 39 行:如果 len(b[k][t])==0 : 【参考方案1】:

每个b[?] 都是一个整数数组,因此b[k][t] 将是一个整数,但您试图在if len(b[k][t])==0: 中取其长度。

避免a2 出现空元素的唯一方法是不使用数组;例如,字典。

【讨论】:

我不知道如何编写代码以避免在 a2 中添加空值。我需要这部分的帮助 我还是不明白 现在我知道了e=0 for k in range(0,len(a)) : l=len(b[k]) for t in range(0,l) : a2[k]=b[k][t] e=e+1 print a2需要写a2=[none] * 8

以上是关于在基数排序中需要帮助的主要内容,如果未能解决你的问题,请参考以下文章

实现类似于基数的排序

你需要知道的九大排序算法Python实现之基数排序

在基数排序中可视化第二次迭代的问题

基数排序:基数排序中的“组”是啥意思?

在 C++ 崩溃中使用向量向量进行基数排序

c中的基数排序算法[关闭]