C++中的合并排序与实例

合并排序遵循分而治之的方法。

意味着将一个问题分解为许多小的子问题。

意味着递归地解决这些小的子问题,然后重新组合它们以创建原始问题的解决方案。

该方法MergeSort()将数组分成相等的部分,直到每个元素分离为止,然后该方法Merge()将它们重新组合,同时每次将它们连接到两个数组时对它们进行排序,就以排序的方式将它们连接起来,以便得到最终的排序数组。

C ++合并排序程序

#include <iostream>

using namespace std;

//合并两个数组
void Merge(int A[], int p, int q, int r)
{
    //的大小
    int n1 = q - p + 1, i, j, k;

    //n2是R []
    int n2 = r - q;

    int L[n1], R[n2];

    for (i = 0; i < n1; i++)

    {
        L[i] = A[p + i];
    }

    for (j = 0; j < n2; j++) {
        R[j] = A[q + j + 1];
    }

    i = 0, j = 0;

    for (k = p; i < n1 && j < n2; k++) {
        if (L[i] < R[j]) {
            A[k] = L[i++];
        }
        else {
            A[k] = R[j++];
        }
    }

    /*
        如果l[]比r[]有更多的元素,那么它就会变成。
        将l[]的所有元素都放到a[]
    */
    while (i < n1) {
        A[k++] = L[i++];
    }

    //如果R []的元素多于L [],则它将全部
    //R []的重定义元素到A []
    while (j < n2) {
        A[k++] = R[j++];
    }
}

//它将划分数组并排序
//他们合并时
void MergeSort(int A[], int p, int r)
{
    int q;

    if (p < r) {
        //q是划分数组的中间元素
        q = (p + r) / 2;
        MergeSort(A, p, q);
        MergeSort(A, q + 1, r);
        Merge(A, p, q, r);
    }
}

int main(){
    //A_Size为A []的大小
    int A_Size;

    cout << "//输入元素数量: ";

    cin >> A_Size;

    int A[A_Size];

    cout << "//输入数组元素: ";

    for (int i = 0; i < A_Size; i++) {
        cin >> A[i];
    }

    MergeSort(A, 0, A_Size - 1);

    for (int i = 0; i < A_Size; i++) {
        cout << A[i] << " ";
    }

    cout << endl;

    return 0;
}

输出结果

First Run:
//输入元素数量: 5
//输入数组元素: 10 30 12 56 60
10 12 30 56 60

Second Run:
//输入元素数量: 10
//输入数组元素: 10 20 50 60 77 88 34 43 1 45
1 10 20 34 43 45 50 60 77 88