C ++のクイックソートについて知っておくべきことすべて



この記事では、例を使用してC ++でクイックソートを実装する方法の詳細で包括的な知識を提供します。

ソートアルゴリズムはたくさんあります。アプリケーションに最適なものを見つけることは、特定のアルゴリズムのパフォーマンス、時間の複雑さ、コードの長さなどの要因を簡単に理解する必要があるタスクです。この投稿では、C ++でクイックソートを実装するために必要なすべての重要な概念を次の順序で見ていきます。

クイックソートアルゴリズムを理解する

と同じように マージソート 、クイックソートは分割統治法に従います。分割統治法を使用することにより、問題を多くのサブ問題に分割し、それらを再帰的に解決します。最初に、プロセス全体を段階的に理解し、その後、例を使用して、プロセス全体を深く理解します。





  1. まず、ソートされていない配列をユーザーに要求します。

  2. 並べ替えられていない配列を取得したら、配列からピボット値を選択する必要があります。任意の値を選択できます。



  3. その後、ピボットポイントを選択したら、ピボット値よりも小さいすべての要素をピボット値の右側に配置し、ピボットよりも大きいすべての要素を配置するように、配列の他の要素を配置する必要があります。値はピボット値の右側に配置されます。

  4. ソートされた配列を取得するまで、ステップ3を実行します。

    SQLの制約は何ですか

それでは、例を考えてアルゴリズムを実装し、それがどのように機能するかを見てみましょう。



こんにちは[5、4、1、11、9、6、2、3]この例では、常にピボットをリストの右端の要素と見なします。

C ++でのクイックソート

各ステップを実行して、問題を解決するために使用したロジックを理解しましょう。

  • まず、ピボットとして「3」を選択し、「3」未満のすべての要素を右側に配置し、「3」より大きいすべての要素を右側に配置しました。

  • この時点で、2つのサブ問題があります。まず、右側のサブ問題を解決しましょう。ピボットとして1つを選択し、「2」を右側に配置しました。

  • 2番目のサブ問題を解決するために、ピボットとして「6」を選択し、前に説明したように要素を配置します。

  • さらに2つのサブ問題があります。 1つ目は、ピボットとして4を選択することで解決され、2つ目は、ピボットとして9を選択することで解決されます。最後に、要素が下線インデックスに配置された並べ替えられた配列があります。

注意- ここで理解しておくべき重要な点は、すべての操作が同じ配列で行われるということです。新しいアレイは作成されません。

C ++でのクイックソートの擬似コード

QuickSort(array []、start_index、end_index){if(start_index

C ++でのクイックソートのプログラム

アルゴリズムを理解し、アルゴリズムの動作について深く理解しました。 C ++でクイックソートを実装し、配列をソートするプログラムを作成しましょう。

#include using namespace std void swap_elements(int * a、int * b){int temp = * a * a = * b * b = temp} int partition(int array []、int start_index、int end_index){intピボット= array [end_index] int i =(start_index-1)for(int j = start_index j<= end_index- 1 j++) { if (array[j] <= pivot) { i++ swap_elements(&array[i], &array[j]) } } swap_elements(&array[i + 1], &array[end_index]) return (i + 1) } void quickSort(int array[], int start_index, int end_index) { if (start_index < end_index) { int partition_index = partition(array, start_index, end_index) quickSort(array, start_index, partition_index - 1) quickSort(array, partition_index + 1, end_index) } } void printArray(int array[], int number) { int i cout<<'Sorted Array: ' for (i = 0 i < number i++) cout << array[i] << ' ' cout << endl } int main() { int Hello[30] int i int NumberofElements cout<>NumberofElementsのコスト<<'Enter the elements one by one: ' for(i=0i>Hello [i]} quickSort(Hello、0、NumberofElements-1)printArray(Hello、NumberofElements)return 0}

出力:

初心者向けのservicenowチュートリアルpdf

時間計算量

ソートアルゴリズムの最も重要な側面、つまり時間の複雑さについて話しましょう。さまざまなシナリオでのアルゴリズムのパフォーマンスについて説明します。これらの値は、このアルゴリズムをアプリケーションに使用できるかどうかを判断するのに役立ちます。

  • 最良の場合- オン)
  • 平均的なケース- (nlogn)
  • 最悪の場合- オン2

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

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