归并排序

Posted hesorchen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了归并排序相关的知识,希望对你有一定的参考价值。

归并排序

平均时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)
最好时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)
最坏时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)
空间复杂度: O ( n ) O(n) O(n)
稳定性:稳定

代码

#include <bits/stdc++.h>
using namespace std;

const int N = 1e5 + 5;

int a[N];
int temp[N];

void mergesort(int a[], int l, int r)
{
    if (l == r)
        return;
    int mid = l + r >> 1;
    mergesort(a, l, mid);
    mergesort(a, mid + 1, r); //递归解决子区间
    int p_l = l, p_r = mid + 1, p = 1;
    while (p_l <= mid && p_r <= r)
    {
        if (a[p_l] <= a[p_r])
            temp[p++] = a[p_l++]; //先放到临时数组中
        else
            temp[p++] = a[p_r++];
    }
    //最后会有一个子区间有剩余
    while (p_l <= mid)
        temp[p++] = a[p_l++];
    while (p_r <= r)
        temp[p++] = a[p_r++];
    //将排好序的数组重新放回原数组中
    for (int i = l; i <= r; i++)
        a[i] = temp[i - l + 1];
}

int main()
{
    int n;
    scanf("%d", &n);
    for (int i = 1; i <= n; i++)
        scanf("%d", &a[i]);

    mergesort(a, 1, n);
    
    for (int i = 1; i <= n; i++)
        printf("%d ", a[i]);
    printf("\\n");
    return 0;
}

以上是关于归并排序的主要内容,如果未能解决你的问题,请参考以下文章

python代码实现归并排序(Merge Sort )

排序之外部排序

Python代码实现归并排序

Python代码实现归并排序

算法排序02——归并排序介绍及其在分治算法思想上与快排的区别(含归并代码)

排序算法之归并排序