例を使用してC ++でマージソートを実装する方法



この記事では、C ++でのマージソートの詳細で包括的な知識とその例を紹介します。

マージソートとは何ですか?マージソートは、分割統治カテゴリに属する​​比較ベースのソートアルゴリズムです。マージソートは、分割統治戦略に基づいて配列をソートするために使用されます。これについては、この投稿で、アルゴリズムなどの他の概念とともに簡単に説明します。また、C ++でのマージソートの時間計算量についても見ていきます。

この記事では、次のポイントについて説明します。





C ++でのマージソートに関するこの記事に進む

Javaでdoubleをintにキャストする方法

分割統治アルゴリズム

クイックソートがどのように機能するかをすでに知っている場合は、分割統治戦略を知っているかもしれません。分割統治には、3つの主要なステップが含まれます。これらの手順を理解するために、開始インデックス「a」と終了インデックス「n」を持つ配列Hello []について考えてみましょう。したがって、次のように配列を記述できます。Hello[a&hellip..n]



分割統治法-分割統治の主要な動きまたは主要なステップは、与えられた問題をサブ問題またはサブパートに分割することです。ここでの落とし穴は、サブ問題が元の問題と同様であり、サイズが小さい必要があるということです。この場合、配列を2つに分割します[a&hellip.m] [m + 1&hellip..n] mはaインデックスとnインデックスの中央にあります

征服-問題をサブ問題に分割し終えたら。これらのサブ問題を再帰的に解決します。

結合-このステップでは、サブ問題のすべてのソリューションを適切な方法で結合します。つまり、2つの異なるソート済み配列を組み合わせて、1つのソート済み配列を形成します。ソートされた配列があります。



C ++でのマージソートに関するこの記事に進む

例を使用したマージソートアルゴリズムの理解

この時点で、マージソートでどのアプローチが使用されるかがわかります。それでは、例を考えて、Hello []のソートされていない配列からソートされた配列までの各ステップを実行してみましょう。
例-こんにちは[10、3、7、1、15、14、9、22]

Merge-sort-in-C++

上の画像では、ソートされていない配列を検討し、マージソートを使用してソートされた配列を取得しました。それでは、各ステップを見て、アルゴリズム全体を理解しましょう。

1.最初に、配列Hello [10、3、7、1、15、14、9、22]を検討しました。この配列には、合計8つの要素があります。

2.前に見たように、マージソートは分割統治アプローチを使用して要素をソートします。配列の中央にあるmを見つけ、配列を中央から分割しました。ここで、m =(a – n)/ 2'a 'は左端の要素のインデックスであり、nは配列の右端の要素のインデックスです。 。

3.最初の分割の後、それぞれ4つの要素で構成される2つの部分があります。前半[10、3、7、1]を見てみましょう。

4. [10、3、7、1]を[10、3]と[7、1]の2つの部分に分割します。その後、それらをさらに[10]、[3]、[7]、[1]に分割します。 mを計算できないため、これ以上除算することはできません。単一の要素を含むリストは、常にソートされていると見なされます。

5.マージはどのように行われますか?確認してみましょう。最初に[10]と[3]が比較され、[1、7]と同じように、昇順[3、10]でマージされます。

6.その後、[3、10]と[1、7]を比較します。比較したら、それらを昇順でマージすると、[1、3、7、10]が得られます。

7. [15、14、9、2]も同様の方法で分割および結合され、[9、14、15、22]を形成します。

8.最後のステップでは、[15、14、9、2] [9、14、15、22]を比較および結合して、ソートされた配列を取得します。つまり、[1、3、7、9、10、14、15、22]。

C ++でのマージソートに関するこの記事に進む

マージソートの擬似コード

残ったら始める

関数mergeSort()は、それ自体を再帰的に呼び出して、配列が単一の要素になるまで配列を分割し、関数merge()を使用してソートされた配列をマージします。

C ++でのマージソートに関するこの記事に進む

C ++でのマージソートプログラム

#include #include #include using namespace std void merge(int a []、int Firstindex、int m、int Lastindex)//分割中に作成されたサブ配列をマージしますvoid mergeSort(int a []、int Firstindex、int Lastindex){if(Firstindexsize int Hello [size]、i cout<<'Enter the elements of the array one by one:n' for(i=0 i>Hello [i] mergeSort(Hello、0、size-1)cout<<'The Sorted List isn' for(i=0 i

出力-

C ++でのマージソートに関するこの記事に進む

時間計算量

時間計算量は、アルゴリズムについて話すときに考慮すべき重要な側面です。マージソートは、他のソートアルゴリズムと比較して非常に時間の複雑さがあると考えられています。

最悪の実行時間-O(n log n)
最良の実行時間-O(n log n)
平均実行時間-O(n log n)

これで、このC ++でのマージソートの記事は終わりです。詳細を知りたい場合は、 信頼できるオンライン学習会社であるEdurekaによる。 EdurekaのJavaJ2EEおよびSOAトレーニングおよび認定コースは、Hibernate&SpringなどのさまざまなJavaフレームワークに加えて、コアJavaコンセプトと高度なJavaコンセプトの両方についてトレーニングするように設計されています。

質問がありますか?このブログのコメントセクションでそれについて言及してください。できるだけ早くご連絡いたします。