バイナリ検索
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