归并排序

#include<iostream>
using namespace std;
int num[100010] , temp[100010];

void merge_sort(int l , int r){
    if(l >= r) return;
    int mid = (l + r) >> 1;
    
    merge_sort(l , mid);
    merge_sort(mid + 1 , r);
    
    int i = l , j = mid + 1 , k = 0;
    while(i <= mid && j <= r){
        if(num[i] <= num[j]) temp[k ++] = num[i ++];
        else temp[k ++] = num[j ++];
    }
    
    while(i <= mid) temp[k ++] = num[i ++];
    while(j <= r) temp[k ++] = num[j ++];
    
    for(int i = 0 , j = l ; i < k ; j ++ , i ++) num[j] = temp[i];
    return ;
}

int main(){
    int n ; 
    cin >> n;
    for(int i = 0 ; i < n ; i ++) cin >> num[i];
    merge_sort(0, n - 1);
    for(int i = 0 ; i < n ; i ++) cout << num[i] << " ";
    return 0;
}
posted @ 2024-10-11 14:10  _l_x_y  阅读(2)  评论(0编辑  收藏  举报