レコードの基本的なアルゴリズム

 

バイナリ検索

LST = [0、1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19] 

DEF binary_search(LST、項目) :
    低= 0 
    ハイ= LEN(LST)-1 
    低いながら<=高:
        ミッド= / 2(高+ロー)
        推測= LST [中間] 
        推測場合==項目:
            戻り中間
        ELIF推測>アイテム:
            ハイ=ミッド- 1#注意索引的变更
        他:
            低い=ミッド+ 1#注意索引的变更
    戻りなし


RET = binary_search(LST、17)
RET場合:
    プリント( 'インデックスである{}'形式(RET)。)
他:
    プリント(」見つかりません。')

  

クイックソート

#は分割基于&統治的快速排序的パイソン实现の
 
LST = [19、4、0、7、14、8、2、12、11、17、13、3、18、10、6、1、15、5、16、 9] 
 
DEFクイック(LST):
    もしlenを(LST)<2:
        LST戻り
    LST =ピボットを[0] 
    LSTでELEためELE [=左の[1:] ELEもし<ピボット] 
    右= [LSTでELEためELE [ 1:] ELE> =ピボット]であれば
    リターンクイック(左)+ [ピボット] +クイックソート(右)
 
sorted_lst =クイック(LST)
プリント(LST)
プリント(sorted_lst)

 

ヒープソート

参考:  https://www.cnblogs.com/chengxiao/p/6129630.html

定義とスタックの基本的な性質

ヒープは、以下の特性を有する完全二分木である:
    各ノードの値は、左と右の子ノードの値以上である、大トップスタックと呼ばれ、
    各ノードの値は、その左の子ノード以下であります小さなスタックトップとして知られている値は、。

親ノードのインデックス(指標K)の任意のノードは、(K-1)/ 2です。
任意のノード(インデックスk)に左索引リーフ・ノードは、2 * K + 1であり、右の索引リーフ・ノードは、2 * K + 2です。
その後、最後の非リーフノードが、インデックスN / 2-1であり、ノードの数がNであると仮定する。

ソート・ヒープの基本的な考え方

大パイル頂部に設定されるべき照合順序、この時点で、ルートノードの最大値は、シーケンス全体のスタックの最上位です。

今回の最大値の最後の最後の要素と交換します。

スタックの残りのn-1番目の要素が再構成され、それは、n個の要素の次の最小値を受け取ることになります。

だから、もう一度実行し、の順序付けられたシーケンスを得ることができるようになります。

ヒープソートコードの実装

ヒープソートクラス(オブジェクト):
    DEF __init __(自己、LST):
        self._list LSTは= 

    DEF ADJUST(セルフ、parent_idx、長さ):
        parent_val = self._list [parent_idx] 
        child_idx 1 + 2 * = parent_idx。
        一方child_idx <長さ:
            #リーフノードの左及び右の葉ノードの大きさを比較し、大きいかかり
            IF child_idxの+ 1 <長さとself._list [child_idx <self._list。[child_idx用+ 1] 
                。child_idx + 1 = 
            #リーフノードを親ノード比較サイズは、より大きな値は、親ノードに割り当てられている
            :self._list [child_idx]> parent_val IF 
                次層としてself._list [parent_idx] = self._list [child_idx]#もそうここで置換、交換作業を必要とするかもしれません半分だけ
                parent_idx = child_idx  
                child_idx。1 + 2 * = child_idx
            他:
                BREAK
        self._list [parent_idx] = parent_val#サイクルの最終位置に現在の親ノードの値

    DEFのheap_build(自己): ステップ1:大トップスタックの構築
        位右下線形から、最後の非リーフノードから調整し始めました左の
        長さ= LEN(self._list)
        parent_idx長= 2-1 // 
        一方parent_idx> = 0:
            self.adjust(parent_idx、長さ)
            。parent_idx - 1 = 
    
    DEFのhead_sort(自己):
        ステップ2:ヒープソート
        長= LEN( self._list)
        レンジ(-length 1、-1でsub_lengthため、-1):
            #1 Step2.1:スイッチング素子およびパイル要素の先端
            TMP = self._list [0] 
            self._list [0] = self._list 【sub_length]  
            self._list [sub_length] = TMP
            #1 Step2.2:リストのシンク端への最大値は、スタック構造を再調整します 
            #注:最大値は徐々に減少として沈没され始めているヒープパイル構造の上から調整し、リストを再配置する必要性を、即ち、得られた最大値は、前にこの調整スタックに参加しないことが保証
            self.adjust(0、sub_length)


LST = [。19 ,. 4,0 ,. 7、14 ,. 8、2、12 ,. 11 ,. 17は、13であります3は、18、10 ,. 6 ,. 1,15 ,. 5、16 ,. 9]は
OBJ =ヒープソート(LST)
obj.heap_build() 
)(obj.head_sort

  

 

おすすめ

転載: www.cnblogs.com/standby/p/9570913.html