2013-05-06 37 views
0

我有一個學校項目,我需要使用不同的排序算法對所有種類的數據類型進行排序。基數排序工作得很好,但除了整數之外,它不能排序。我可能不會添加除整數以外的排序結果,因爲每個數據類型都會按整數排序。將字符串轉換爲數字(不解析)爲基數排序

這就是說,我想知道是否有更好的方法將字符串轉換爲整數?這就是我帶來的。我不想超越智能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"]) 

回答

2

首先,看看this article。該文章顯示,是的,在某些情況下,您可以找出比任何其他排序更快的字符串排序算法。

其次,更重要的是,我會問自己,如果你在做過早的優化。使用python的sort()函數對50k條目進行排序將會非常快速。除非您確定這是您應用程序的瓶頸,否則我不會擔心它,只會使用sort()函數。如果它是一個瓶頸,我還要確保沒有辦法可以避免做所有這些事情(例如緩存,對未排序數據起作用的算法等)。

+0

+1鏈接到文章,一個很好的閱讀! – 2013-05-06 14:25:15