python - 解密在 O(N) 时间内运行的基数排序的字符串排序版本
问题描述
我一直在尝试编写一个需要 O(N) 时间的基数排序版本(其中 N 是数组中所有字符串的组合长度)而不是 O(Nk)(其中 N 是数组的长度和k 是数组中最长字符串的长度)。这是伪代码:
到目前为止,这是我的尝试:
def radix_sort(array):
array = counting_sort_length(array)
n = len(array) - 1
k = len(array[n]) - 1
m = n
for j in range(k,-1, -1):
while m>1 and len(array[m-1]) >= j+1:
m-=1
count = [0 for i in range(27)]
for i in range(m,n+1):
count[get_idx(array[i][j])] += 1
position = [0 for i in range(27)]
position[get_idx('a')] = 1
for i in range(1,27):
position[i] = position[i-1] + count[i-1]
temp = [None for i in range((n - m + 1)+1)]
for i in range(m, n + 1):
pos = position[get_idx(array[i][j])]
temp[pos-1] = array[i]
position[get_idx(array[i][j])] += 1
for i in range(m, n+1):
array[i] = temp[i - m]
return array
def get_idx(char):
return ord(char) % 97
def get_character(idx):
return chr(idx + 97)
def counting_sort_length(array):
res= []
for word in array:
res.append(len(word))
u = max(res)
count = [0 for i in range(u+1)]
n = len(array)
for i in range(n):
count[res[i]] += 1
position = [0 for i in range(u+1)]
position[0] = 1
for i in range(1,u+1):
position[i] = count[i-1] + position[i-1]
temp = ["" for i in range(n)]
for i in range(n):
temp[position[res[i]] - 1] = array[i]
position[res[i]] += 1
array = temp
return array
我设法得到一个输出,但数组没有排序。有人可以帮我吗,如果可能的话,请指出我在代码中犯的错误?
TIA
解决方案
推荐阅读
- php - 带有 GROUP BY 和 WHERE 子句的 Mysql SUM
- python - Pandas df 到多个嵌套字典/json
- nativescript - NativeScript 5 Core JavaScript Android 侧加载选项卡未禁用
- calendar - 如何在带有日期字段的自定义实体上配置日历视图?
- python - 有没有办法开发 Python GUI 来控制 LabVIEW VI?
- shell - ls -R 如何显示文件(空格)
- visual-studio-code - Visual Studio Code 在与 MVS 相同的文件中具有代码导航?
- python - 如何正确地将具有多个外键的表序列化到同一个表
- python - 使用 Pandas groupby 组合数据
- sql - 如何获取 Oracle 环境变量 LONG?