基数排序的python循环

Posted

技术标签:

【中文标题】基数排序的python循环【英文标题】:python loop of radix sort 【发布时间】:2014-04-13 23:18:36 【问题描述】:

我只是写了另一个基数排序程序,这是我的代码:

#----------radix sort----------
def set_output():
    output_list = []
    for i in range (10):
        output_list.append(queue())
    return output_list

def set_radix(lists):
    output_list = set_output()
    for queue in lists:
        for num in queue:
            a = num[2]
            output_list[int(a)].add(num)
    return output_list

def sec_radix(input_list, i):
    output_list = set_output()
    for queue in input_list:
        while len(queue) > 0:
            num = queue.after()
            a = num[i]
            output_list[int(a)].add(num)
    return output_list

def done_radix(num_list):
    return sec_radix(sec_radix(set_radix(num_list), 1), 0)

python shell 一直告诉我“IndexError: string index out of range”,我的数字串没问题。我认为我的def set_radix()函数有问题,但我找不到它在哪里?

【问题讨论】:

哪一行出现错误? 该队列不应该大写吗? 无法运行您的某些代码。另外,我不知道从哪里开始运行它... 【参考方案1】:

这是一个基数排序编码,所以合理的人可以理解它。我从here 偷走了大部分。

def radixsort( aList ):
  RADIX = 10
  maxLength = False
  tmp , placement = -1, 1

  while not maxLength:
    maxLength = True
    # declare and initialize buckets
    buckets = [list() for _ in range( RADIX )]

    # split aList between lists
    for  i in aList:
      tmp = i // placement
      print ("i is " , i)
      print ("placement is " , placement)
      print ("tmp is ", tmp)
      print ("tmp % RADIX is ", tmp % RADIX)
      buckets[tmp % RADIX].append( i )
      if maxLength and tmp > 0:
        maxLength = False

    # empty lists into aList array
    a = 0
    for b in range( RADIX ):
      buck = buckets[b]
      for i in buck:
        aList[a] = i
        a += 1

    # move to next digit
    placement *= RADIX
  return aList



a = radixsort([18,5,100,3,1,19,6,0,7,4,2])
print(a)

我得到它的网站上的代码由于 % 产生浮点数而引起了一些问题。我怀疑从 python 2 到 3 的区别。

【讨论】:

以上是关于基数排序的python循环的主要内容,如果未能解决你的问题,请参考以下文章

“基数排序”展现Python的优雅与简洁

这个基数排序代码中的最后一个“for”循环是做啥的?

计数排序和基数排序的实现

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

Python中的基数排序[关闭]

为啥我的基数排序 python 实现比快速排序慢?