首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >难以实现计数排序算法

难以实现计数排序算法
EN

Stack Overflow用户
提问于 2017-01-28 00:47:49
回答 3查看 685关注 0票数 0

我试图在python中教自己一些排序算法,并且在输出方面遇到了一些问题。我正在尝试实现一个计数排序算法,我已经做到了这一点:

代码语言:javascript
复制
def counting_sort(l):
    nums = l
    highest = max(nums) + 1
    helper_list = [0] * highest
    s_list = []
    for i in range(len(nums)):
        value = nums[i]
        helper_list[value] += 1

    for j in range(len(helper_list)):
        s_list.append([j] * helper_list[j])

    return s_list

一切都进行得很顺利,但是当我给出诸如[5, 2, 2, 3, 1, 2]这样的输入时。

我得到的输出是:[[], [1], [2, 2, 2], [3], [5]]

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-28 00:59:20

你只需将“附加”改为“扩展”。append函数向您的列表添加一个元素,在本例中是另一个列表。extend函数将列表与作为参数的列表连接起来。

您的功能应该如下所示:

代码语言:javascript
复制
def counting_sort(elements):
     highest = max(elements) + 1
     helper_list = [0] * highest
     s_list = []
     for value in elements:
         helper_list[value] += 1

     for j in range(len(helper_list)):
         s_list.extend([j] * helper_list[j])

     return s_list
票数 1
EN

Stack Overflow用户

发布于 2019-05-22 17:32:03

代码语言:javascript
复制
def counting_sort(unordered_list, k, desc=False):
  '''
  unordered_list is the input array to be sorted.
  k is the range of non-negative key values.
  desc lets the algorithm to sort the array in descending order.
  time complexity is the sum of the times for two steps, O(n + k).
  '''
  count_list = [0] * k
  for element in unordered_list:
    count_list[element] += 1

  if desc:
    enumerator = reversed(list(enumerate(count_list)))
  else:
    enumerator = enumerate(count_list)

  sorted_list = []
  for idx, count in enumerator:
    sorted_list += [idx] * count

  return sorted_list
票数 0
EN

Stack Overflow用户

发布于 2017-01-28 01:00:15

问题是这条线:

代码语言:javascript
复制
s_list.append([j] * helper_list[j])

这意味着要将list ([j]*helper_list[j])附加到s_list,将该列表添加为新元素或s_list

相反,您需要将一个列表添加到另一个列表中,这可以如下所示:

代码语言:javascript
复制
s_list.append += ([j] * helper_list[j])
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41905274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档