1

私は基本的な検索と並べ替えで誰かを指導しています。挿入ソートでは、数値的に前の値よりも大きい値がある場合、負の反復を行います。もちろん、存在しない array[-1] を呼び出すチェックがあるため、このアプローチは問題を引き起こす可能性があります。

以下の太字で下線が引かれているように、 and x > 0 ブール値を追加すると、インデックスの問題が回避されます。

私の質問は、これはどうですか?両方のブール値の有効性を保証するために、array[-1] の呼び出しが引き続き行われるのではないでしょうか?

the_list = [10,2,4,3,5,7,8,9,6]

for x in range(1,len(the_list)):
    value = the_list[x]


    while value < the_list[x-1] **and x > 0**:

        the_list[x] = the_list[x-1]

        x=x-1

    the_list[x] = value

print the_list
4

2 に答える 2

0

AND操作はtrue、両方の引数が true の場合にのみ戻ります。そのため、引数の 1 つが false の場合、最終的な値はその時点で既にわかっているため、他の引数をチェックする意味はありません。あなたの例では、通常、評価は左から右に行われますが、それは原則ではなく、使用した言語がそのルールに従っていないように見えます(そうでなければ、配列ルックアップでクラッシュするはずです)。しかし、そうかもしれませんが、この特定の実装はこれを何らかの形で最適化し (IMHO は良い考えではありません) x > 0、配列を検索する前に最初に「より単純な」ものを評価します ( if のチェックなど)。x > 0ほとんどの一般的な言語では、ルックアップの前にテストが評価されない場合でもクラッシュするため、この正確な順序が機能する理由を仕様で確認してください

于 2013-04-11T20:29:04.127 に答える