MergeSort

PHOTO EMBED

Tue Nov 05 2024 16:41:36 GMT+0000 (Coordinated Universal Time)

Saved by @signup1

#include <stdio.h>

void merge(int a[], int b[], int low, int mid, int high) {
    int h = low, j = mid + 1, i = low;
    
    while (h <= mid && j <= high) {
        if (a[h] <= a[j]) {
            b[i] = a[h];
            h += 1;
        } else {
            b[i] = a[j];
            j += 1;
        }
        i += 1;
    }
    if (h > mid) {
        for (int k = j; k <= high; k++) {
            b[i] = a[k];
            i += 1;
        }
    } else {
        
        for (int k = h; k <= mid; k++) {
            b[i] = a[k];
            i += 1;
        }
    }
    for (int k = low; k <= high; k++) {
        a[k] = b[k];
    }
}

void mergeSort(int a[], int b[], int low, int high) {
    if (low < high) {
        int mid = (low + high) / 2;
        mergeSort(a, b, low, mid); 
        mergeSort(a, b, mid + 1, high); 
        merge(a, b, low, mid, high); 
    }
}

int main() {
    int n;
    printf("Enter Size: ");
    scanf("%d", &n);

    int a[n], b[n];
    printf("Enter Elements: ");
    for (int i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }

    mergeSort(a, b, 0, n - 1);

    printf("Sorted Elements: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", a[i]);
    }
    printf("\n");

    return 0;
}
content_copyCOPY