Untitled

 avatar
unknown
plain_text
a year ago
2.0 kB
4
Indexable
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>

void merge(int arr[], int l, int m, int r) {
    int i, j, k;
    int n1 = m - l + 1;
    int n2 = r - m;

    int L[n1], R[n2];

    for (i = 0; i < n1; i++)
        L[i] = arr[l + i];
    for (j = 0; j < n2; j++)
        R[j] = arr[m + 1 + j];

    i = 0;
    j = 0;
    k = l;
    while (i < n1 && j < n2) {
        if (L[i] <= R[j]) {
            arr[k] = L[i];
            i++;
        } else {
            arr[k] = R[j];
            j++;
        }
        k++;
    }
   
   while (i < n1) {
        arr[k] = L[i];
        i++;
        k++;
    }

    while (j < n2) {
        arr[k] = R[j];
        j++;
        k++;
    }
}

void mergeSort(int arr[], int l, int r) {
    if (l < r) {
        int m = l + (r - l) / 2;

        mergeSort(arr, l, m);
        mergeSort(arr, m + 1, r);

        merge(arr, l, m, r);
    }
}

int main() {
    int arr[] = {12, 11, 13, 5, 6, 7};
    int n = sizeof(arr) / sizeof(arr[0]);

   
    pid_t pid1, pid2;
   
    pid1 = fork();
   
    if (pid1 == 0) {
        mergeSort(arr, 0, n/2 - 1);
       
        printf("First half sorted by Child Process 1: ");
        for (int i = 0; i < n/2; i++) {
            printf("%d ", arr[i]);
        }
       
        printf("\n");
       
        exit(0);
    } else {
        pid2 = fork();
       
        if (pid2 == 0) {
            mergeSort(arr, n/2, n - 1);
           
            printf("Second half sorted by Child Process 2: ");
            for (int i = n/2; i < n; i++) {
                printf("%d ", arr[i]);
            }
           
            printf("\n");
           
            exit(0);
        } else {
            wait(NULL);
            wait(NULL);
           
            merge(arr, 0, n/2 - 1, n - 1);
           
            printf("Final sorted array: ");
            for (int i = 0; i < n; i++) {
                printf("%d ", arr[i]);
            }
           
            printf("\n");
        }
    }

    return 0;
}
Editor is loading...
Leave a Comment