将字符串转换为数字(不解析)进行基数排序



我有一个学校项目,我需要用不同的排序算法对各种数据类型进行排序。基数排序工作得很好,但它只能排序整数。我可能不会添加除整数以外的排序结果,因为每个数据类型都会被排序为整数。

也就是说,我想知道是否有更好的方法将字符串转换为整数?这是我带来的。我不想比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"])

首先,看看这篇文章。那篇文章表明,是的,在某些情况下,您可以为字符串找出一种比任何其他排序更快的基数排序算法。

第二,也是更重要的,我会问你自己,你是否在做过早的优化。用python的sort()函数对50k项进行排序将会非常快。除非您确定这是应用程序中的瓶颈,否则我不会担心它,只会使用sort()函数。如果这是一个瓶颈,我也会确保没有某种方法可以避免做所有这些排序(例如缓存,对未排序数据工作的算法等)

最新更新