Data Structures and Algorithms -- Merge Sort

#include <iomanip>
#include <iostream>
#include <map>
#include <unordered_map>
using namespace std;

int arr[100005];
int tmp[100005];

void merge_(int a[], int l, int m, int r){
    int i=l,j=m+1;
    int cnt=0;
    for(;i<=m&&j<=r;){
        if(a[i]<=a[j]) tmp[++cnt]=a[i],i++;
        else tmp[++cnt]=a[j], j++;
    }
    while(i<=m) tmp[++cnt]=a[i],i++;
    while(j<=r) tmp[++cnt]=a[j],j++;
    for(int i=l,j=1;i<=r;i++,j++){
        a[i]=tmp[j];
    }
}

void merge_sort(int a[], int l, int r){
    if(l==r) return;
    int m = (l+r)>>1;
    merge_sort(a, l, m);
    merge_sort(a, m+1, r);
    merge_(a, l, m, r);
}


int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++) cin>>arr[i];
    merge_sort(arr, 1, n);
    for(int i=1;i<=n;i++) cout<<arr[i]<<" ";
    return 0;
}

Time complexity O(nlogn)

Space complexity O(n)

Guess you like

Origin blog.csdn.net/qq_41021141/article/details/131379635