さまざまな並べ替えアルゴリズムを使用して、あらゆる種類のデータ型を並べ替える必要がある学校のプロジェクトがあります。基数ソートはうまく機能しますが、整数以外はソートできません。すべてのデータ型が整数としてソートされるため、おそらく整数以外のソート結果を追加するつもりはありません。
そうは言っても、文字列を整数に変換するより良い方法があるかどうか知りたいですか? これが私が持ってきたものです。私は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')
それはうまく機能しますが、それを処理するより良い方法があるかどうかを知りたいです。基数ソートで整数以外のものをソートすることは無意味に聞こえます。整数のリストをソートできたとしても。すべてのキーの値をリストに戻す必要があります。
みたいなことをしようと思っていました。リストの各値について、整数キーを取得します。そのキーをハッシュテーブル内に置き、値をそのハッシュテーブルのリストに入れます。リスト内の値を整数キーに置き換えてから、キーのリストを並べ替えます。
ソートされたリスト内の各キーについて、そのキーの値のリストを取得し、1 つの項目をポップします。その項目をリストに入れて続行します。
また、変換を必要としない他の並べ替えの代わりに基数並べ替えを使用して、このプロセスを最適化する方法があるかどうかも知りたいです。リスト内の項目の量が 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"])