2016-06-26 18 views
1

私はアルファベット順に名前のリストをソートするためにPythonでこのアルゴリズムを作り、this list与えられたとき、それが正常に動作しない理由を私は理解することはできません。アルファベット順ソートアルゴリズムが機能しないのはなぜですか?

for a in range(0,len(V)): 
    for b in range(a,len(V)): 
     equal=True 
     for N in range(0,min(len(V[a]),len(V[b]))): 
      if ord(V[b][N])<ord(V[a][N]): 
       V[b],V[a]=V[a],V[b] 
       equal=False 
       break 
     if equal==True and len(V[a])>len(V[b]): 
      V[b],V[a]=V[a],V[b] 
print(V) 
+3

*「正しく動作しません」*、オフサイトリンクではなく[mcve]を指定してください。 – jonrsharpe

+1

リストと少数の名前をペアにします。中間結果を見るためにいくつかの印刷ステートメントに振りかける。また、意味のある名前VとNを使って、あなたが何をしているのかを理解するのに本当に役立たないのですか?また、ordのものは何ですか? Pythonは直接文字を比較することができます –

+0

私は、結果を与えるときにリストがソートされていないことを意味し、オフサイトのリンクは残念ですが、このリスト['h'、 'y'、 'a'、 'q' 'ab'、 'ab'、 'abc']、正しい出力を表示する: ''、 'ab'、 'b'、 'h'、 'q'、 'y'そのサイトの膨大なリストからリストを修正したが、ソートされていなかった。 – TanasaIoan

答えて

1

ああ、私は問題を発見しました。この2つの例で、あなたのコードを実行している乾燥してみてください。

V = ["ABCZ", "XYZA"] 
V = ["ABCE", "XYZF"] 

最初たとえば、あなたの状態は、最後の文字までトリガされない場合は、(「ABCZ」から)「Z」と「A」( "からXYZA ")を比較する。

if ord(V[b][N])<ord(V[a][N]): 

これは誤って2つの文字列を交換します。

+0

V(b [N])!= V(V [a] [N])ならば、 [a] [N]:中断 – TanasaIoan

0

Aですべての文字列を置くような何かをしようとしない理由sort()

>>> str=["MARY","PATRICIA","LINDA","BARBARA","ELIZABETH","JENNIFER","MARIA","SUSAN",‌​"MARGARET","DOROTHY","LISA","NANCY"]; 
>>> str.sort(); 
>>> print str 

を使用して、リストとは、出力:

['BARBARA', 'DOROTHY', 'ELIZABETH', 'JENNIFER', 'LINDA', 'LISA', 'MARGARET', 'MARIA', 'MARY', 'NANCY', 'PATRICIA', 'SUSAN'] 
+0

私はstr.sort()を使ってみましたが、print(str.sort())のように古いソートリストを変更する代わりに新しいソートリストを与えると思っています。 – TanasaIoan

関連する問題