Algorithm 基数排序在Lua中不起作用
首先,我应该提到我的代码编写时间并不长,尽管从我的代码中可以明显看出这一点:p 我有两个问题,首先排序功能不正常,但确实按长度对数字进行排序。这里的任何帮助都将不胜感激 其次,它同时改变了它获取的表和它返回的表(不知道为什么)。我如何防止它改变它抓住的桌子 我更希望人们不要发布一个完全优化的预制代码,因为我不会以这种方式学习或理解任何东西Algorithm 基数排序在Lua中不起作用,algorithm,sorting,lua,radix-sort,Algorithm,Sorting,Lua,Radix Sort,首先,我应该提到我的代码编写时间并不长,尽管从我的代码中可以明显看出这一点:p 我有两个问题,首先排序功能不正常,但确实按长度对数字进行排序。这里的任何帮助都将不胜感激 其次,它同时改变了它获取的表和它返回的表(不知道为什么)。我如何防止它改变它抓住的桌子 我更希望人们不要发布一个完全优化的预制代码,因为我不会以这种方式学习或理解任何东西 function radix_sort(x) pass, bucket, maxstring = 0, x, 2 while true do
function radix_sort(x)
pass, bucket, maxstring = 0, x, 2
while true do
pass = pass + 1
queue = {}
for n=#bucket,1,-1 do
key_length = string.len(bucket[n])
key = bucket[n]
if pass == 1 and key_length > maxstring then
maxstring = key_length
end
if key_length == pass then
pool = string.sub(key, 1,1)
if queue[pool + 1] == nil then
queue[pool + 1] = {}
end
table.insert(queue[pool + 1], key)
table.remove(bucket, n)
end
end
for k,v in pairs(queue) do
for n=1,#v do
table.insert(bucket, v[n])
end
end
if pass == maxstring then
break
end
end
return bucket
end
总是看着第一个角色;也许你的意思是
string.sub(key,pass,1)
我做了很多更改,希望你能仔细查看并了解它们。我尽可能地发表评论
函数基数排序(x)
通过,maxstring=0,0
--为了避免覆盖x,像这样复制到bucket中
--它还提供了初始化maxstring的机会
bucket={}
对于n=1,#x,1 do
--因为我们可以将下面的字符串函数的所有条目转换为字符串
bucket[n]=tostring(x[n])
key_length=string.len(bucket[n])
如果键长度>maxstring,则
maxstring=键长度
结束
结束
--不喜欢“while true…break”,因为我们可以在这里设置条件
而传递表总是通过引用传递。要制作只读表,请参阅@mike,不客气。请务必单击最能解决问题的答案旁边的绿色复选标记,以便问题不再显示为打开状态。
pool = string.sub(key, 1,1)
> input={55,2,123,1,42,9999,6,666,999,543,13}
> output=radix_sort(input)
> for k,v in pairs(output) do
> print (k , " = " , v)
> end
1 = 1
2 = 2
3 = 6
4 = 13
5 = 42
6 = 55
7 = 123
8 = 543
9 = 666
10 = 999
11 = 9999