【发布时间】:2021-04-05 12:23:23
【问题描述】:
我正在尝试为字符串实现基数排序,但是我只能通过字符串长度来实现。我想按长度和字母顺序对字符串数组进行排序。甚至可以用基数排序来做到这一点吗?
这是我的代码:
def flatten(arr):
flatten_arr = []
for item_arr in arr:
for item in item_arr:
flatten_arr.append(item)
return flatten_arr
count_size = 256
def get_max_length(book_content_arr):
size = 0
for word in book_content_arr:
word_size = len(word)
if word_size > size:
size = word_size
return size
def radix_sort(arr):
word_length = get_max_length(arr)
for index in range(0, word_length):
buckets = [[] for i in range(count_size)]
for item in arr:
if len(item) > index:
num = ord(item[index])
buckets[num].append(item)
else:
buckets[0].append(item)
arr = flatten(buckets)
return arr
example = ["A", "Z", "AB", "EWASADAS", "BY", "SDA" "ZA", "BD", "BA", "DSADSA", "BZ", "KA", "ES"]
print(radix_sort(example))
我的示例数组是这样的
example = ["A", "Z", "AB", "EWASADAS", "BY", "SDA" "ZA", "BD", "BA", "DSADSA", "BZ", "KA", "ES"]
以及预期的输出:
["A", "Z", "AB", "BD", "BY", "BZ", "ES", "KA", "DSADSA", "EWASADAS"]
【问题讨论】:
-
为了澄清您的意思,您能否提供一个输入和预期输出的示例,清楚地说明您要查找的排序顺序是什么?
-
@trincot 当然,我已经编辑了我的帖子
-
为此,如果您对字符串长度有一个恒定的限制,而不是像现在这样的变量,那么您只能从基数排序中受益。这是必需的,否则您的内存使用量可能会爆炸(对于基于长度的存储桶)。
标签: python arrays string sorting radix-sort