1.二分は、順序付けられたリストを維持します
二分モジュールの実装はまだ順序付けられたリストを維持しながら、要素のリストに挿入するためのアルゴリズム。
挿入は1.1を注文しました
簡単な例は、順序付けられたシーケンス内のリストに要素を挿入する)(ここで使用insort、以下に与えられます。
インポート二等分 #乱数のAシリーズ 値= [14、85、77、26、50、45、66、79、10、3、84、77、1 ] 印刷(' 新しい順位の内容は' ) 印刷します(' - - --- -------- ' ) L = [] のための I における値: 位置 = bisect.bisect(L、I) bisect.insort(L、I) プリント(' {3} {。 3} ' .format(I、位置)、L)
最初の列は、乱数の新しい出力を示しています。数がリストに挿入されることを第二ラウンドを示します。各行は、現在の順序付けられたリストの残りの部分です。
リストは、直接速いかもしれソートを完了構築される場合、これは、実際には、この実施形態では、処理するデータの量は非常に単純な例です。しかし、長いリストのために、この挿入ソートアルゴリズムのような時間の使用が大幅に二つのリストを比較するために、操作の特にメンバーの時間とメモリを節約することができかなりの計算のオーバーヘッドを必要としています。
1.2処理を繰り返します
結果セットを表示する前に重複する値77を備えます。二分モジュールは、重複処理するための2つの方法を提供します。新しい値は、左または元の値の右側に挿入することができます。insort()関数は、実際にinsort_right()の別名で、この関数は元の値の後に新しい値を挿入します。insort_left()関数に対応する新しい値が元の値の前に挿入されています。
インポート二等分 #乱数のAシリーズ 値= [14、85、77、26、50、45、66、79、10、3、84、77、1 ] 印刷(' 新しい順位の内容は' ) 印刷します(' - - --- -------- " ) #使用bisect_leftとinsort_left。 L = [] のための I における値: 位置 = bisect.bisect_left(L、I) bisect.insort_left(L、I) プリント(' {3} {3} ' .format(I、位置)、L)
)(insort_left bisect_left()を使用して同じデータを処理する場合、同じ結果が繰り返される値の順序付きリストが、異なる挿入位置です。