我有一个学校项目,我需要使用不同的排序算法对所有类型的数据类型进行排序。基数排序运行良好,但除了整数之外,它不能排序。我可能不会为除整数之外的任何内容添加排序结果,因为每种数据类型都将按整数排序。
那就是说,我想知道是否有更好的方法将字符串转换为整数?这就是我的结果。我不想超越python,并试图尽可能地使用标准功能。
def charToHex(char):
return hex(ord(char))[2:]
def stringToHex(text):
t = ''
for char in text:
t += charToHex(char)
return t
def stringToInt(text):
return int(stringToHex(text), 16)
print stringToInt('allo')
print stringToInt('allp')
print stringToInt('all')
它运作良好,但我很高兴知道是否有更好的方法来处理它。对于它的价值,使用基数排序除了整数之外的其他任何东西听起来毫无意义。因为即使您可以对整数列表进行排序。您必须将所有键的值恢复到列表中。
我记得要做那样的事情。对于列表中的每个值,获取一个整数键。将该密钥放在哈希表中,并将该值放在该哈希表的列表中。用整数键替换列表中的值,然后对键列表进行排序。对于排序列表中的每个键,获取该键的值列表并弹出一个项目。将该项目放入列表中并继续。
我还想知道是否有办法优化此过程,以便使用基数排序而不是其他不需要任何转换的排序值得。列表中的项目数量可能超过50000。
修改
实际上,此处的代码不适用于不同大小的字符串。我不太确定怎么检查。用空格填充字符串似乎有效。
def getMaxLen(ls):
lenght = 0
for text in ls:
lenght = max(lenght, len(text))
return lenght
def convertList(ls):
size = getMaxLen(ls)
copy = ls[:]
for i, val in enumerate(copy):
copy[i] = stringToInt(val.ljust(size, ' '))
return copy
print convertList(["allo", "all", "bal"])
答案 0 :(得分:2)
首先,看看this article。那篇文章表明是的,在某些情况下,你可以找出比其他任何类型更快的字符串的基数排序算法。
其次,更重要的是,我会问你自己是否在做过早的优化。使用python的sort()
函数对50k项进行排序将非常快。除非你确定这是你的应用程序的瓶颈,否则我不会担心它,只会使用sort()
函数。如果它是一个瓶颈,我也会确保没有一点你可以避免做所有这些类型(例如缓存,处理未分类数据的算法等)。