2016-07-26 8 views
0

"johnny"と "bobby"という名前がある場合、どのようにコンピュータを使用してそれらを並べ替えることができますか?文字列をアルファベット順にソートする数値の基礎は何ですか?

私はそれらをお互いに比較すると数値的にはすべての条件に当てはまるとは思われません。

を考えてみましょう:

def listsum(numList): 
    theSum = 0 
    for i in numList: 
     theSum = theSum + i 
    return theSum 

test = 0 
mystr='BA' 
for code in map(ord, mystr): 
    test = test + listsum([code]) 
    print(test) 

して、変更を、

mystr='AZ' 

は、私はちょうどASCII比較を行うことができない、だから、155

を取得します。私が手動で行うとすれば、私は何のために使うのですか?私は特定の言語や組み込みのソート方法を使用したくない。

+0

あなたの言語はtageされていませんが、PythonやRubyのようです。いずれにしても、各文字を2文字列の字句的に比較する必要があります。 –

+0

@TimBiegeleisen私は特定の言語に基づいていないので、私は言語にタグを付けませんでした。私はこのコンセプトに興味があり、Pythonを例として使用しました。 – johnny

答えて

2

最初の文字を比較してください。一方が他方よりも符号化順で早い場合、その文字列は他の文字列より早く、逆も同様です。それらが同じ場合は、次の文字に進み、同じことをします。両方の文字列の終わりに達すると、文字列は等しくなります。 1つの文字列の最後に達した場合、その文字列はより早くなります。

合計は辞書編集の順序とは関係ありません。一例として、

は、ここでは上記の、明確な、しかし実際には最適ではない実装です:

def str_cmp(a, b): 
    la = len(a) 
    lb = len(b) 

    if la == 0 and lb == 0: 
     return 0 # two empty strings are equal 
    if la == 0: 
     return -1 # an empty string is earlier than a non-empty one 
    if lb == 0: 
     return 1 # a non-empty string is later than an empty one 

    oa = ord(a[0]) 
    ob = ord(b[0]) 

    if oa < ob: 
     return -1 # a string whose initial character is earlier is earlier 
    if oa > ob: 
     return 1 # a string whose initial character is later is later 

    return str_cmp(a[1:], b[1:]) # strings with same initial characters compare 
            # the same as the strings with those characters 
            # chopped off 

ご希望の場合は、sortまたはsortedcmpのパラメータとして、この機能を使用することができます。

関連する問題