面接の質問に必ず読むべき一冊! Python のトップ 5 ソート アルゴリズムとその実装コード

面接の質問に必ず読むべき一冊! Python のトップ 5 ソート アルゴリズムとその実装コード

ソートは、すべての IT エンジニアと開発者にとって不可欠な知識スキルです。コーディング面接に合格するだけでなく、アルゴリズム自体も理解する必要があります。さまざまなソート アルゴリズムは、アルゴリズムの設計がプログラムの複雑さ、速度、効率に大きな影響を与える可能性があることを示す良い例です。

面接でよく聞かれる最も一般的なソートアルゴリズムのトップ 5 を見て、それらを Python で実装する方法を見てみましょう。

[[337940]]

1. バブルソート

バブルソートは、ソートの仕組みを明確に示しながらもシンプルで理解しやすいため、入門レベルの CS コースで最もよく教えられているソートです。バブルソートはリストを順に進み、隣接する要素のペアを比較します。要素の順序が間違っている場合は、入れ替えられます。リストがソートされるまで、リストのソートされていない部分の走査を繰り返します。バブルソートはリストのソートされていない部分を繰り返し通過するため、最悪の場合の複雑さは O(n²) になります。

  1. バブルソートを定義します。
  2. 定義 swap(i, j):
  3. arr[i]、arr[j] = arr[j]、arr[i]
  4.  
  5. n = 長さ(arr)
  6. 交換 = True  
  7.      
  8. x = -1
  9. 交換中:
  10. 交換 = False  
  11. x = x + 1
  12. iが範囲(1, nx)内にある場合:
  13. arr[i - 1] > arr[i]の場合:
  14. スワップ(i - 1, i)
  15. 交換 = True  
  16.                      
  17. リターン

2. 選択ソート

選択ソートも非常に単純で、バブルソートよりも優れています。 2 つから選択する必要がある場合は、デフォルトの「右選択ソート」を使用するのが最適です。選択ソートを使用して、入力リスト/配列を 2 つの部分に分割します。1 つはソートされた項目のサブリスト、もう 1 つはリストの残りを構成する残りの項目のサブリストです。

まず、ソートされていないサブリスト内の最小の要素を見つけて、それをソートされたサブリストの最後に配置します。したがって、最小のソートされていない要素を取得し、ソートされた順序でソートされたサブリストに格納し続けます。リストが完全にソートされるまでこのプロセスが繰り返されます。

  1. def selection_sort(arr):
  2. iが範囲(len(arr))場合:
  3. 最小値 = i
  4.          
  5. j範囲(i + 1, len(arr))内にある場合:
  6. # 最小値を選択
  7. arr[j] < arr[最小値]の場合:
  8. 最小値 = j
  9.  
  10. # ソートされた配列の最後に置く
  11. arr[最小値]、arr[i] = arr[i]、arr[最小値]
  12.              
  13. リターン

3. 挿入ソート

挿入ソートはバブルソートや選択ソートよりも高速で、よりシンプルであると言えます。カードゲームをプレイするときと同じように、カードをシャッフルするプロセスは挿入ソートの繰り返しです。ループの各反復で、挿入ソートは配列から 1 つの要素を削除します。次に、他のソートされた配列内でその要素が属する位置を検索し、そこに挿入します。入力要素がなくなるまでこのプロセスを繰り返します。

  1. def inserting_sort(arr): 挿入ソート
  2.          
  3. iが範囲(len(arr))場合:
  4. カーソル= arr[i]
  5. 位置 = 私
  6.          
  7. pos > 0かつarr[pos - 1] >カーソルの場合:
  8. # リスト内の数字を入れ替える
  9. arr[位置] = arr[位置 - 1]
  10. 位置 = 位置 - 1
  11. # 中断して最終的なスワップを行う
  12. arr[pos] =カーソル 
  13.  
  14. リターン

4. マージソート

マージソートは分割統治アルゴリズムの完璧な例です。このアルゴリズムを使用するには、主に次の 2 つの手順だけが必要です。

(1) ソートされていないリストを、それぞれが 1 つの「ソートされていない」要素を持つ N 個のサブリストになるまで分割し続けます。ここで、N は元の配列の要素数です。

(2)繰り返しマージ、つまり、2つのサブリストを一度にマージして、すべての要素がソートされた配列に完全にマージされるまで、新しいソートされたサブリストを生成する。

  1. def merge_sort(arr):
  2. # 最後の配列を分割する
  3. len(arr) <= 1の場合:
  4. リターン
  5. 中間 = len(arr) // 2
  6. # 両方の部分で再帰的にmerge_sortを実行します
  7. = merge_sort(arr[:mid]), merge_sort(arr[mid:])
  8.  
  9. # 一緒にマージする
  10. merge( left , right ,arr.copy())を返します
  11.  
  12.  
  13. def merge(、 マージ済み ):
  14.  
  15. 左カーソル、右カーソル = 0, 0
  16. left_cursor < len( left )かつright_cursor < len( right ) の場合:
  17.        
  18. # それぞれをソートして結果に入れる
  19. [左カーソル] <=[右カーソル] の場合:
  20. 結合[左カーソル+右カーソル]=[左カーソル]
  21. 左カーソル += 1
  22. それ以外
  23. 結合された[左カーソル + 右カーソル] =[右カーソル]
  24. 右カーソル += 1
  25.              
  26. left_cursorrange(left_cursor, len( left ))内にある場合:
  27. 結合された[左カーソル + 右カーソル] =[左カーソル]
  28.          
  29. right_cursor がrange(right_cursor, len( right ))内にある場合:
  30. 結合された[左カーソル + 右カーソル] =[右カーソル]
  31.  
  32. マージされたリターン

5. クイックソート

クイックソートも、マージソートと同様に分割統治アルゴリズムです。少し複雑ではありますが、ほとんどの標準実装ではマージソートよりもはるかに高速に実行され、最悪の場合でも O(n²) の複雑度に達することはほとんどありません。主なステップは 3 つあります。

(1)まず配列からピボットと呼ばれる要素を選択します。

(2)軸より小さい要素はすべて軸の左に移動し、軸より大きい要素はすべて軸の右に移動します。これをパーティション操作と呼びます。

(3)前の軸の値より小さいか大きい値を持つ要素の各サブ配列に対して、上記2つの手順を再帰的に適用する。

  1. defパーティション(配列、開始終了):
  2. pivot_idx =開始 
  3. i がxrange( begin +1, end +1)内にある場合:
  4. 配列[i] <= 配列[ begin ]の場合:
  5. ピボットIDx += 1
  6. 配列[i]、配列[pivot_idx] = 配列[pivot_idx]、配列[i]
  7. 配列[pivot_idx]、配列[ begin ] = 配列[ begin ]、配列[pivot_idx]
  8. pivot_idxを返す
  9.  
  10. def quick_sort_recursion(配列、 begin end ):
  11. 開始>=終了の場合:
  12. 戻る 
  13. pivot_idx = パーティション(配列、開始終了)
  14. quick_sort_recursion(配列、 begin 、pivot_idx-1)
  15. quick_sort_recursion(配列、pivot_idx+1、終了)
  16.  
  17. def quick_sort(配列、開始= 0、終了= None):
  18. 終了の場合 なし:
  19. end = len(配列) - 1
  20.      
  21. quick_sort_recursion(配列、 begin end )を返す

- 終わり -

多くの学生は、Python を学習する際にさまざまなアルゴリズムの問​​題に遭遇します。簡単に理解できるものもありますが、学習に時間と労力を要するものもあります。

この記事の 5 つのソート アルゴリズムは、Python 初心者に適しています。ほとんどのベテラン プログラマーはすでにソート アルゴリズムに精通しており、面接の過程でそれらを学習することを余儀なくされます。

<<:  Python コーディング面接の前に解くべき 10 個のアルゴリズム

>>:  教師あり学習、教師なし学習、強化学習とは何ですか?ついに誰かが明らかにした

ブログ    
ブログ    
ブログ    

推薦する

...

...

...

旅の途中+第2世代、「バルペンハイマー」完成までの7つのステップにカルパシーが驚愕 | 実際のテスト体験を添付

数日前、バービー・ハイモアがインターネットで話題になって以来、ネットユーザーたちは、MidJourn...

ビデオ分析以外に、AI と機械学習はどのようなメリットをもたらすのでしょうか?

人工知能 (AI) と機械学習 (ML) は物理セキュリティ市場に大きな影響を与え、ビデオ分析の精度...

ビッグデータと人工知能のために生まれた新しい職業:アルゴリズム専門家

ビッグデータとは、さまざまな種類のデータから貴重な情報を迅速に取得する能力を指します。これを理解する...

...

Langchain、ChromaDB、GPT 3.5 に基づく検索強化型生成

翻訳者|朱 仙中レビュー | Chonglou概要:このブログでは、検索拡張生成と呼ばれるプロンプト...

GitHub トップ プロジェクト: 30 万語の図解アルゴリズム問題辞書、超実用的なリソース、6,000 個のスター

[[336071]]貴重なリソースをまとめましたので、ぜひご覧ください。アルゴリズムはコンピュータサ...

...

Reddit ユーザーが「泣く」: 私はアルゴリズム エンジニアではなく、「パラメータ調整者」です

[[387580]]まず最初に質問させてください。あなたは自分が「スイッチャー」だと思いますか、それ...

AI に「大きな力と小さな心」を与える - ユニバーサル CNN アクセラレーション設計

[[207759]]導入FPGA ベースの汎用 CNN アクセラレーション設計により、FPGA 開発...

NLPの問題の90%を解決する方法を段階的に教えます

[[223595]]はじめに: この記事では、著者の Emmanuel Ameisen が、機械学習...

世界的なIT大手はAIを活用してデータセンターのエネルギー節約と排出量削減に取り組んでいる

データ センターは、世界中の何十億もの人々が毎日使用するアプリケーション、Web サイト、サービスに...

...