Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonクイックソートをコーディングする方法

Python QuickSortはピボット要素を選択し、その要素を分割します 配列 2つの新しい 配列 s。ピボットよりも大きい数値は1つになります 配列 ;ピボットよりも小さい数値は別の数値になります。各 配列 が並べ替えられてから、すべての 配列 は1つに統合されます。

Pythonクイックソートをコーディングする方法

プログラミングでリストを並べ替えるために使用できる並べ替えアルゴリズムはたくさんあります。 Python挿入ソート、バブルソートなどがあります。クイックソートは、最も一般的な種類の並べ替えの1つです。

このガイドでは、クイックソートとは何か、そしてそれらがどのように機能するかについて説明します。 Python QuickSortの例を見ていき、PythonQuickSortの実装方法を学ぶことができます。

面倒なことはせずに、始めましょう!

Python QuickSortとは何ですか?

Python QuickSortアルゴリズムは、配列をサブ配列に分割します。このアルゴリズムは、これらのサブ配列を再帰的に呼び出して、リスト内の各要素を並べ替えます。サブ配列の内容は、新しいサブ配列に移動されないピボット要素によって決定されます。

QuickSortアルゴリズムは、分割して征服します。これは、リストを並べ替えるタスクがいくつかのサブタスクに分割されることを意味します。並べ替えの最後に、これらのサブタスクの結果がまとめられて、並べ替えられたリストが返されます。

クイックソートでは、サブタスクは各サブリストにピボットを設定し、ピボットに対する相対的な値に基づいて要素を並べ替えます。

Python QuickSortはいつ使用する必要がありますか?

QuickSortは、時間の複雑さが重要な場合に役立ちます。これは、QuickSortが他のアルゴリズムよりも少ないメモリスペースを使用するため、効率が向上するためです。

参加者の81%は、ブートキャンプに参加した後、自分たちの技術的な仕事の見通しについてより自信を持っていると述べました。今日のブートキャンプにマッチしましょう。

平均的なブートキャンプの卒業生は、ブートキャンプの開始から最初の仕事を見つけるまで、キャリアの移行に6か月も費やしませんでした。

Python再帰に精通している場合にのみ、QuickSortを使用する必要があります。これは、QuickSortアルゴリズムが再帰関数に依存しているためです。

QuickSortは、小さい配列でのマージソートよりも効率的です。ただし、大規模なデータセットでは、挿入ソートまたはマージソートの方が高速な場合があります。

クイックソートはどのように機能しますか?

クイックソートは、ピボットとして機能する要素を選択します。これは、リスト内の任意の要素にすることができます。このチュートリアルでは、リストの最後の項目(3)を選択します。

8 4 5 2 1 3

クイックソートは、リスト内のアイテムをループするときに、ピボットの値をすべての数値と比較します。アイテムがピボット番号より大きい場合、ピボットの後に番号を移動します。それ以外の場合は、ピボットの前に番号を移動します:

2 1 3 8 5 4

値3がリストの下に移動しました。 3未満のすべてのアイテムが左に移動しました。 3より大きい値はすべて右に移動しました。

Python配列は、ピボットより大きいアイテムとピボットより小さいアイテムの2つに分割されています。

このプロセスが開始されると、2つの半分のそれぞれで新しいピボットが開始されます。このピボットは個別に開始され、上記と同じアルゴリズムを使用します。まず、各リストの最後の値と等しいピボット値を設定します。

Pivot One

ピボット2

2 1
8 5 4

次に、ピボットより大きいすべての値をピボットの右側に移動します。ピボットよりも小さいすべての値を左に移動します。

Pivot One

ピボット2

1 2
4 8 5

このプロセスは、リストを並べ替えるまで続きます:

初めて 1 2
4 8 5
2回目
1

8 5





5 87t?/
3回目




8

最終的な配列は次のようになります:

1 2 3 4 5 8

Pythonクイックソートの例

クイックソートには、ピボット関数とクイックソート関数の2つの関数が必要です。

パーティション関数から始めましょう。これにより、ピボット要素の値に基づいて配列が分割または準備されます。

パーティション関数は次のようになります:

  1. ピボット要素を選択します
  2. ピボットよりも大きいすべてのアイテムをピボットの右側に移動します
  3. ピボットよりも小さいすべてのアイテムをピボットの左側に移動します

QuickSortPythonプログラム

このアルゴリズムを実装するプログラムを書いてみましょう:

def prepare(numbers, low, high):
	pivot = numbers[high]
	item = low - 1

	for i in range(low, high):
		if numbers[i] <= pivot:
			item = item + 1
			(numbers[item], numbers[i]) = (numbers[i], numbers[item])

	(numbers[item + 1], numbers[high]) = (numbers[high], numbers[item + 1])

	return item + 1

まず、ピボット要素を選択します。これは、リストの最大数と同じです。

次に、Pythonのforループを使用して、リスト内のすべてのアイテムをループします。数値がピボット以下の場合、ピボットの左側に移動します。それ以外の場合は、ピボットの右側に移動します。

Python関数は新しい高い値を返します。新しい高い値はアイテム+1に等しくなります。

次に、アルゴリズムを実行する必要があります。これを行うには、別の関数を記述します。

def quick_sort(numbers, low, high):
	if low < high:
		pivot = prepare(numbers, low, high)

		quick_sort(numbers, low, pivot - 1)

		quick_sort(numbers, pivot + 1, high)

この関数は、「low」の値が「high」の値よりも小さいかどうかを確認します。もしそうなら、私たちのソートは続行できます。それ以外の場合、ソートは停止します。並べ替えが停止した場合は、リストが並べ替えられたことを意味します。

次に、関数は prepare()を呼び出します 方法。これにより、ピボットのポインタが識別され、アイテムが正しい場所に移動します。

次に、関数は quick_sort()を呼び出します。 メソッドを2回。初めて、ピボットの左側の要素でクイックソートを実行します。 2回目は、ピボットの右側の要素でQuickSortを実行します。したがって、関数はそれ自体を呼び出すため、再帰的です。

これは、リスト内のすべてのアイテムが並べ替えられるまで続きます。

メインメソッドの記述

並べ替えるリストを定義するメインプログラムを作成しましょう:

values = [8, 4, 5, 2, 1, 3]
total_values = len(values)

quick_sort(values, 0, total_values - 1)

print(values)

まず、並べ替える値のリストを指定します。 Python len()メソッドを使用して、値のリストの長さを計算します。次に、 quick_sort()を呼び出します。 メソッド。

並べ替える数値として「値」を渡します。次に、低い数値として0を渡します。 「値」から1を引いた長さは、指定する高い値です。リストの最初の項目のインデックス番号は0であるため、高い値は値の長さから1を引いたものです。

プログラムを実行してみましょう:

[1, 2, 3, 4, 5, 8]

私たちのコードはソートされたリストを返します!やりました。背中を軽くたたいてください。クイックソートは理解や実装が簡単ではありません。

複雑さの概要

平均して、このアルゴリズムはO(n * log n)で実行されます。これは、ピボット要素が最大または最小の要素ではなく、ピボット要素が中央の要素の近くにない場合に発生します。

クイックソートの複雑さは最悪の場合O(n2)です。これは、ピボットとして選択された要素が最大または最小の要素である場合に発生します。この場合、ピボット要素は常に並べ替えられた配列の最後にあります。これにより、不要なサブアレイが多数作成されます。

このアルゴリズムの最良の複雑さはO(n * log n)です。これは、ピボット要素が中央の要素と等しいか、中央の要素の近くにある場合に発生します。

アルゴリズムの複雑さの詳細については、BigONotationのガイドをご覧ください。

結論

Python QuickSortsは再帰を使用して、リストを小さなリストに分割し、それを並べ替えます。各リストは、ピボット要素を中心に並べ替えられています。ピボットより大きい要素は右に移動します。小さい要素はピボットの左側に移動します。

主要なPython学習リソース、オンラインコース、および書籍に関するガイダンスについては、包括的なPython学習方法ガイドをお読みください。


  1. Google ColaboratoryでPythonコードを実行するにはどうすればよいですか?

    Google Colaboratoryは、セットアップを必要とせず、完全にクラウドで実行される無料のJupyterノートブック環境です。これはGoogleクラウドでホストされ、クラウド環境を使用してPythonスクリプトを実行およびテストしたいPythonコーダーの利益のためにGoogleによって維持されます。この記事では、Googleのコラボレーティブクラウド環境をセットアップして実行する方法を説明します。 Pythonノートブックを開く このグーグルリンク(https://colab.research.google.com/)に移動します。下の画面が開きます。下の図に示すように、右下隅か

  2. Pythonでバイトコードファイルを生成する方法

    すべてのPythonプログラムは、ソースコードを自動的にコンパイルして、バイトコードとも呼ばれるコードをコンパイルしてから実行します。 モジュールを初めてインポートするとき、またはソースファイルが新しいファイルであるとき、または更新されたファイルがあるときはいつでも、最近コンパイルされたファイルは、.pyファイルと同じディレクトリにファイルをコンパイルするときに.pycファイルが作成されます。 (python 3-から、.pycファイルが.pyファイルと同じディレクトリではなく__pycache__というサブディレクトリにあることがわかります)。これは、次回プログラムを実行するときにPyth