📜  c++ 归并排序 - C++ (1)

📅  最后修改于: 2023-12-03 15:14:00.222000             🧑  作者: Mango

C++ 归并排序

归并排序(Merge Sort)是一种稳定的排序算法,它的时间复杂度为 O(nlogn)。归并排序采用的是分治策略,将待排序的序列划分为若干个子序列,分别进行排序,最后再将子序列合并成一个有序序列。

算法原理

归并排序的核心思想是将待排序的序列不断二分,直到每个子序列只有一个元素,然后再依次将两个有序的子序列合并成一个有序序列,直至最终的有序序列。

具体步骤如下:

  1. 将待排序序列不断二分,直到每个子序列只有一个元素。

  2. 将每个子序列内部进行排序。

  3. 依次将两个有序的子序列合并成一个有序序列,直至最终的有序序列。

代码实现

下面是归并排序的 C++ 代码实现:

void mergeSort(int arr[], int l, int r)
{
    if (l < r)
    {
        int mid = (l + r) / 2;

        mergeSort(arr, l, mid);
        mergeSort(arr, mid + 1, r);

        int i = l;
        int j = mid + 1;
        int k = 0;
        int temp[r - l + 1];

        while (i <= mid && j <= r)
        {
            if (arr[i] <= arr[j])
            {
                temp[k++] = arr[i++];
            }
            else
            {
                temp[k++] = arr[j++];
            }
        }

        while (i <= mid)
        {
            temp[k++] = arr[i++];
        }

        while (j <= r)
        {
            temp[k++] = arr[j++];
        }

        for (i = l, k = 0; i <= r; i++, k++)
        {
            arr[i] = temp[k];
        }
    }
}
使用示例

下面是使用归并排序对数组进行排序的示例:

#include <iostream>

using namespace std;

void mergeSort(int arr[], int l, int r);

int main()
{
    int arr[] = {5, 3, 9, 7, 1, 6, 2, 8, 4};
    int n = sizeof(arr) / sizeof(arr[0]);

    cout << "Original array: ";
    for (int i = 0; i < n; i++)
    {
        cout << arr[i] << " ";
    }
    cout << endl;

    mergeSort(arr, 0, n - 1);

    cout << "Sorted array: ";
    for (int i = 0; i < n; i++)
    {
        cout << arr[i] << " ";
    }
    cout << endl;

    return 0;
}

输出:

Original array: 5 3 9 7 1 6 2 8 4 
Sorted array: 1 2 3 4 5 6 7 8 9 
总结

归并排序是一种效率较高且稳定的排序算法,在实际程序应用中具有重要的意义。希望通过本文的介绍,大家可以更加深入地了解归并排序算法的原理和实现。