Merge Sort

#include<stdio.h>

void merge(int arr[],int arr1[],int size1,int arr2[],int size2){
    int i = 0,j = 0,k = 0;
    
    while(i < size1 && j < size2){
        if(arr1[i] <= arr2[j]){
            arr[k++] = arr1[i++];
        }else{
            arr[k++] = arr2[j++];
        }
    }
    while(i < size1){
        arr[k++] = arr1[i++];
    }
    while(j < size2){
        arr[k++] = arr2[j++];
    }
}
    

void mergesort(int arr[],int n){
    if (n <= 1) return;
    int mid = n / 2;
    int arr1[mid];
    int arr2[n - mid];
    for (int i = 0; i < mid; i++) {
        arr1[i] = arr[i];
    }
    for (int i = mid; i < n; i++) {
        arr2[i - mid] = arr[i];
    }
    mergesort(arr1, mid);
    mergesort(arr2, n - mid);
    merge(arr, arr1, mid, arr2, n - mid);
}


int main() {
    int arr[10] = {3, 6, 7, 4, 9, 1, 2, 9, 6, 4};
    int n = 10;
    mergesort(arr, n);
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

Code copied to clipboard!