ホームページ >バックエンド開発 >C++ >C++ でマージ ソート アルゴリズムを使用する方法

C++ でマージ ソート アルゴリズムを使用する方法

WBOY
WBOYオリジナル
2023-09-19 13:24:24646ブラウズ

C++ でマージ ソート アルゴリズムを使用する方法

C でのマージ ソート アルゴリズムの使用方法

マージ ソートは古典的な並べ替えアルゴリズムであり、分割統治法の考え方を使用して分割します。ソートされるシーケンス 2 つのサブシーケンスを別々にソートし、2 つの順序付きサブシーケンスを 1 つの順序付きシーケンスにマージします。以下では、C 言語を使用してマージ ソート アルゴリズムを実装する方法と具体的なコード例を紹介します。

  1. アルゴリズムのアイデア

マージ ソートの中心となるアイデアは、ソート対象のシーケンスを複数のサブシーケンスに分割し、サブシーケンスに対して再帰呼び出しソートを実行することです。最後にシーケンスを並べ替えると、サブシーケンスがマージされます。

具体的な手順は次のとおりです。
1) シーケンスの長さが 1 の場合は、順序付けされていることを意味し、直接返します。
2) シーケンスを 2 つのサブシーケンスに均等に分割し、次のようにします。並べ替え
3) 2 つの順序付きサブシーケンスを 1 つの順序付きシーケンスにマージします

  1. コード例

以下はマージの実装です。 C 言語を使用したソート アルゴリズム コード例:

#include <iostream>
#include <vector>

using namespace std;

// 合并两个有序子序列
void merge(vector<int>& arr, int left, int mid, int right) {
    int i = left;    // 左子序列起始索引
    int j = mid + 1; // 右子序列起始索引
    int k = 0;       // 临时数组起始索引
    vector<int> temp(right - left + 1); // 临时数组

    // 比较两个子序列的元素,将较小的元素放入临时数组中
    while (i <= mid && j <= right) {
        if (arr[i] <= arr[j]) {
            temp[k++] = arr[i++];
        } else {
            temp[k++] = arr[j++];
        }
    }

    // 将剩余的元素复制到临时数组中
    while (i <= mid) {
        temp[k++] = arr[i++];
    }
    while (j <= right) {
        temp[k++] = arr[j++];
    }

    // 将临时数组的元素复制回原数组
    for (int m = 0; m < k; ++m) {
        arr[left + m] = temp[m];
    }
}

// 归并排序递归函数
void mergeSort(vector<int>& arr, int left, int right) {
    if (left < right) {
        int mid = (left + right) / 2;

        // 递归调用排序
        mergeSort(arr, left, mid);
        mergeSort(arr, mid + 1, right);

        // 合并两个有序子序列
        merge(arr, left, mid, right);
    }
}

// 归并排序函数
void mergeSort(vector<int>& arr) {
    mergeSort(arr, 0, arr.size() - 1);
}

int main() {
    vector<int> arr = {4, 6, 2, 8, 9, 1, 5, 3, 7};

    // 调用归并排序函数
    mergeSort(arr);

    // 输出排序结果
    for (int i = 0; i < arr.size(); ++i) {
        cout << arr[i] << " ";
    }
    cout << endl;

    return 0;
}

上記のコードは、C を使用してマージ ソート アルゴリズムを実装する例です。まず、2 つの順序付けられたサブシーケンスをマージする merge 関数が定義されます。次に、mergeSort 関数が定義されます。この関数は、マージ ソートの再帰呼び出しを行うために使用されます。最後に、main関数内でmergeSort関数を呼び出し、ソート対象の配列をソートし、ソート結果を出力します。

  1. 概要

マージ ソート アルゴリズムは、時間計算量が O(nlogn) の効率的で安定したソート アルゴリズムです。再帰呼び出しとマージ操作を通じて、マージ ソートは、並べ替えられるシーケンスを並べ替え用の小さなブロックに分割し、順序付けられたサブシーケンスを順序付けられたシーケンスにマージできます。 C 言語で実装された具体的なコード例を通じて、マージ ソート アルゴリズムの実装プロセスをより深く理解し、習得することができます。

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

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