目次
アルゴリズムの説明
コードの実装
ホームページ バックエンド開発 Python チュートリアル Pythonソートアルゴリズムのマージソートを実装する方法

Pythonソートアルゴリズムのマージソートを実装する方法

May 21, 2023 am 08:31 AM
python

アルゴリズムの説明

このセクションの最初の高度な並べ替えアルゴリズムは、マージ ソートです。 「マージャー」という言葉には「合併する」という意味があります。名前が示すように、マージ ソート アルゴリズムは、まずシーケンスをサブシーケンスに分割し、そのサブシーケンスを並べ替えてから、順序付けられたサブシーケンスを完全な順序付けされたシーケンスにマージするアルゴリズムです。実際には分割統治の考え方が採用されています。

マージ ソートの平均時間計算量は O(nlgn)、最良の場合の時間計算量は O(nlgn)、最悪の場合の時間計算量も O(nlgn) です。その空間複雑さは O(1) です。さらに、マージ ソートは安定した並べ替えアルゴリズムです。

昇順ソートを例として、マージ アルゴリズムのプロセスを図 2-21 に示します。

元の配列は、8 つの数値の順序付けされていない配列です。 1 回の操作の後、8 つの数値の配列は 4 つの数値の 2 つの順序なし配列に分割されます。各操作では、すべての最小部分配列に要素が 1 つだけ含まれるまで、順序なし配列が半分に分割されます。配列内に要素が 1 つだけある場合は、配列を順序付けする必要があります。次に、プログラムは 2 つの小さな順序配列を 1 つの大きな順序配列にマージし始めます。まず、1 つの数値を含む 2 つの配列を 2 つの数値を含む配列にマージし、次に 2 つの数値を含む 2 つの配列を 4 つの数値を含む配列にマージし、最後に 8 つの数値を含む配列にマージします。すべての順序付けされた配列が結合されると、形成された最も長い順序付けされた配列がソートされます。

Pythonソートアルゴリズムのマージソートを実装する方法

コードの実装

マージ ソート コード:

  #归并排序
nums = [5,3,6,4,1,2,8,7]
def MergeSort(num):
  if(len(num)<=1):        #递归边界条件
   return num         #到达边界时返回当前的子数组
  mid = int(len(num)/2)      #求出数组的中位数
  llist,rlist = MergeSort(num[:mid]),MergeSort(num[mid:])#调用函数分别为左右数组排序
  result = []
  i,j = 0,0
  while i < len(llist) and j < len(rlist): #while循环用于合并两个有序数组
   if rlist[j]<llist[i]:
     result.append(rlist[j])
     j += 1
   else:
     result.append(llist[i])
     i += 1
  result += llist[i:]+rlist[j:]  #把数组未添加的部分加到结果数组末尾
  return result         #返回已排序的数组
print(MergeSort(nums))
ログイン後にコピー

プログラムを実行すると、出力結果は次のようになります:

[1,2,3,4,5,6,7,8]
ログイン後にコピー

MergeSort の場合 () 関数では、最初のステップは境界条件を判断することです。要素が 1 つだけ含まれる配列が関数のパラメーターとして渡された場合、配列内には要素のみが存在するため、配列は最小サイズに達します。配列を再帰的に分解するタスクが完了したら、分解された配列を前の再帰レベルに戻すだけです。

ソートされていない配列の長さがまだ 1 より大きい場合は、変数 Mid を使用して配列の中央の添え字を格納し、ソートされていない配列を左右の 2 つの部分配列に分割します。次に、ソートされた左右の部分配列を格納する 2 つの新しい配列を作成します。ここでは再帰の考え方が使われています。 MergeSort() 関数はリストを並べ替える関数としてのみ考えられますが、MergeSort() 関数内では関数自体を呼び出して 2 つの部分配列を並べ替えることもできます。

続いて、while ループを使用して、既にソートされた 2 つの配列をマージします。 2 つの配列内の要素の相対的なサイズを決定できないため、2 つの変数 i と j を使用して、それぞれ左側のサブ配列と右側のサブ配列で追加を待機している要素の位置をマークします。 while ループが終了すると、結果リストに追加されていない最大の要素が部分配列の最後に残っている可能性があるため、result =llist[i:] rlist[j:] ステートメントは、これらの要素が追加されないようにするためのものです。見逃されている。配列のマージが完了すると、関数は順序付けられた配列を出力します。

以上がPythonソートアルゴリズムのマージソートを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? Apr 01, 2025 pm 11:15 PM

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

Pythonパラメーター注釈は文字列を使用できますか? Pythonパラメーター注釈は文字列を使用できますか? Apr 01, 2025 pm 08:39 PM

Pythonパラメーター注釈の代替使用Pythonプログラミングでは、パラメーターアノテーションは、開発者が機能をよりよく理解して使用するのに役立つ非常に便利な機能です...

Pythonスクリプトは、特定の場所のカーソル位置への出力をどのようにクリアしますか? Pythonスクリプトは、特定の場所のカーソル位置への出力をどのようにクリアしますか? Apr 01, 2025 pm 11:30 PM

Pythonスクリプトは、特定の場所のカーソル位置への出力をどのようにクリアしますか? Pythonスクリプトを書くときは、以前の出力をカーソル位置にクリアするのが一般的です...

なぜ私のコードはAPIによってデータを返しているのですか?この問題を解決する方法は? なぜ私のコードはAPIによってデータを返しているのですか?この問題を解決する方法は? Apr 01, 2025 pm 08:09 PM

なぜ私のコードはAPIによってデータを返しているのですか?プログラミングでは、APIが呼び出すときにヌル値を返すという問題に遭遇することがよくあります。

uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? Apr 01, 2025 pm 10:51 PM

UvicornはどのようにしてHTTPリクエストを継続的に聞きますか? Uvicornは、ASGIに基づく軽量のWebサーバーです。そのコア機能の1つは、HTTPリクエストを聞いて続行することです...

文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? 文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? Apr 01, 2025 pm 11:18 PM

Pythonでは、文字列を介してオブジェクトを動的に作成し、そのメソッドを呼び出す方法は?これは一般的なプログラミング要件です。特に構成または実行する必要がある場合は...

GoまたはRustを使用してPythonスクリプトを呼び出して、真の並列実行を実現する方法は? GoまたはRustを使用してPythonスクリプトを呼び出して、真の並列実行を実現する方法は? Apr 01, 2025 pm 11:39 PM

GoまたはRustを使用してPythonスクリプトを呼び出して、真の並列実行を実現する方法は?最近、私はPythonを使用しています...

Windowsの下のpython .whlファイルをどこからダウンロードしますか? Windowsの下のpython .whlファイルをどこからダウンロードしますか? Apr 01, 2025 pm 08:18 PM

Pythonバイナリライブラリ(.whl)のダウンロードメソッドは、Windowsシステムに特定のライブラリをインストールする際に多くのPython開発者が遭遇する困難を調査します。一般的な解決策...

See all articles