0

私のソフトウェアの主要な仕事のために、私はプログラムを作成しなければなりません。要約すると、ハイスコアリストはファイルに書き込む前に並べ替える必要があります。これを行うために、私はバブルソートを使用していますが、組み込みのソート機能を使用できません。データの読み取り元のテキストファイルは、ネストされたリストに保存されます。テキストファイルは次のようになります。

NameOne
10
NameTwo
15
NameThree
9

これは私が持っているバブルソートコードですが、機能しません:

b_not_sorted = True
while b_not_sorted:
    counter = 0
    b_not_sorted = False
    for counter in range(len(highest_scores) - 1):
        if highest_scores[counter] < highest_scores[counter + 1]:
            b_not_sorted = True
            highest_scores[counter], highest_scores[counter+1] = highest_scores[counter+1], highest_scores[counter]
        counter = counter + 1

スコアを最高から最低に並べ替える必要があります。どんな助けでも大歓迎です、そしてあなたは私のプログラムクレジットで適切にクレジットされます:)。ありがとう。

4

2 に答える 2

5

ヒントは次のとおりです。

while外側のループが実行されている回数を確認します。複数回実行する必要がありますよね?何があっても、ループを終了させる原因となるものは常に何が起こりますか?

コードを1行ずつ調べて、すべてのポイントで何が起こるかを確認してください。

外側のループの最後にあるステートメントb_not_sorted = Falseは、1回だけ実行した後に外側のループを終了させます。そのステートメントをコードの別の部分に移動する必要があります。頭の中での名前をに変更してみてくださいb_not_sortedI_still_need_to_go_through_the_list

明らかに最初の行で:

while I_still_need_to_go_through_the_list:

リストをまったく調べていないので、Trueである必要があります。順調かどうかわかりません。

そして行の後:

if highest_scores[counter] < highest_scores[counter + 1]:

もちろん、リストに変更を加えたばかりで、それ以上の変更が必要ないことを確認する必要があるため、さらにパスを作成する必要があります。

しかし、変更が加えられていない場合はどうなりますか?I_still_need_to_go_through_the_listその場合でなければなりませんFalse。うーん。ループのI_still_need_to_go_through_the_list = False直前置くと、リストに変更を加えない限り、それはまさに私たちが望んでいることです。forFalse

于 2012-06-13T09:52:58.073 に答える
0

あなたはb_not_sorted = False最初の反復の直後にやっていますが、そこにあるべきではありません!アルゴリズムは、ソートが完了する前に停止します。

代わりb_not_sorted = Trueif highest_scores[counter] < highest_scores[counter + 1]


また、スワッピングコードはPythonではるかに見栄えがする可能性があります。使用する代わりに、temp_varこれを実行します。

highest_scores[counter], highest_scores[counter+1] = highest_scores[counter+1], highest_scores[counter]

Pythonスタイルガイドでは、ステートメントを記述したり記述したりし== Trueないことをお勧めします。このようにしてください:== Falseif

while b_not_sorted:
于 2012-06-13T09:53:37.667 に答える