序文
アルゴリズムをソートするアルゴリズムの一部であるインタビューのテストセンターの焦点は難しいことではありませんが、詳細については、ハイライトの基本的なスキルです、それは多くの人が不明である答えを恐れているであれば下に着きます。
Leetcodeが本日(パイソン)様々なアルゴリズムだけでなく、いくつかのメモを達成するためのテンプレートのタイトルについて何かを言うために、不備が正しい私にしてください。
アルゴリズムを巻き込みます
- バブルソート
- クイックソート
- マージソート
- ヒープソート
- 選択ソート
- 挿入ソート
- シェルソート
Leetcodeアセスメントアドレス - 75ソート色ミディアム難易度
テキスト
これは、問題を説明することを意図している:
アレイのn個の要素の、赤、白、青、合計を考えると、その場でそれらをソートするように、同じ色を持つと赤、白、青の順に配置され、隣接する要素。
実際には非常に簡単、リスト上のアレイの行のシーケンスのように見えますが、退屈な上、自分の並べ替えでは、この質問は、まさに様々なソートアルゴリズムを測定するために使用することができます。
- バブルソート
アイデアは、それが並ん言うことですすべての要素と比較し、交換価値のその隣接する要素、要素がトップにバブリングさがダウンし、すべての旅行、ソートに次の旅行を作ることですそれは比較にならないでしょう。
したがって、各パスの数を比較する必要が-1である実装、動作をバブリング第一層の比較サイクル、第二層ループ実行の数を制御します。
1 |
クラス:DEF (セルフ、NUMS:リスト[INT]) - > なし:「」 " 思考バブルソート: 順次配列内の各要素のためにソートされ、それらは最大適切な位置に排出される 具体的な方法であります彼が交換位置よりも(小さく)、大きなバックの要素とそのコントラスト要素は、するまで右の位置に切り替えられた 取るために下からプロセスと同様の水疱の形成 :注意点を 、各旅行は、ソート最後の要素の後に比較の数があることがので、決定される- 1、外側の制御ループは、実際には比較の数であるように 「」 " L =(NUMS)lenのための Iにおける範囲(L)の:のための Jでレンジ(L - I - 1): IF NUMS [J]> NUMS [J + 1 ]: NUMS [J]、NUMS [J +。1 ] NUMS [J + = 1 ]、NUMS [J]を |
后面就不写全部的类了,只给出方法。
クイック
アイデアの迅速ドレインは、右側の値よりも大きい場合、左、上の値よりも小さい場合、参照番号を選択することである、とのみセクション要素まで、それぞれ左右セクション、上のステップを繰り返します。
再帰的ではなく、の代わりに、この質問が提出しました。1
2
3
4
5
6
7
8DEF quick_sort (自己、NUMS:リスト[INT]) - > なし:場合 lenの(NUMS)< 2:戻り NUMS pivit_index = 0 pivit = NUMS [pivit_index]は iが[=左のために私に pivit_index + [NUMS 1 ]:もし I <= pivit] 右= [Iがのために私に NUMS [pivit_index + 1:]もし I> pivit]戻り(左)self.quick_sort + [pivit] + self.quick_sort(右)
非再帰バージョン、間隔下限と上限のセーブスタックと、ソートを配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26DEF パーティション(自己、NUMS、L、R) :
pivit = NUMS [L]一方、L <R:一方、L <Rと NUMS [R]> = pivit: R - = 1 NUMS [L] = NUMS [R]一方 L <Rと NUMS [L] <= pivit: L + = 1 NUMS [R] = NUMS [L] NUMS [L] = pivit戻り L
DEF quick_sort (自己、NUMS:リスト[INT]) - > なし:
STK = []
stk.append(LEN(NUMS) - 1)
stk.append( 0)、一方 STK: L = stk.pop() R = STK )(.pop ミッド= self.partition(NUMS、L、R)の場合:<ミッドL - stk.append(MID 1) stk.append(L)の場合:中間R> stk.append(R) (stk.appendミッド+ 1)