C Programs | IT Developer
IT Developer

C Programs



Share with a Friend

Arrays in C

Merge Sort Program

C Program: Merge Sort Program

C

#include <stdio.h>

 

// Function to merge two halves

void merge(int arr[], int left, int mid, int right) {

    int i, j, k;

    int n1 = mid - left + 1;

    int n2 = right - mid;

 

    int L[n1], R[n2]; // Temporary arrays

 

    // Copy data to temp arrays

    for (i = 0; i < n1; i++)

        L[i] = arr[left + i];

    for (j = 0; j < n2; j++)

        R[j] = arr[mid + 1 + j];

 

    // Merge the temp arrays back into arr[left..right]

    i = 0;

    j = 0;

    k = left;

 

    while (i < n1 && j < n2) {

        if (L[i] <= R[j]) {

            arr[k] = L[i];

            i++;

        } else {

            arr[k] = R[j];

            j++;

        }

        k++;

    }

 

    // Copy remaining elements of L[]

    while (i < n1) {

        arr[k] = L[i];

        i++;

        k++;

    }

 

    // Copy remaining elements of R[]

    while (j < n2) {

        arr[k] = R[j];

        j++;

        k++;

    }

}

 

// Function to implement Merge Sort

void mergeSort(int arr[], int left, int right) {

    if (left < right) {

        int mid = (left + right) / 2;

 

        // Sort first and second halves

        mergeSort(arr, left, mid);

        mergeSort(arr, mid + 1, right);

 

        // Merge the sorted halves

        merge(arr, left, mid, right);

    }

}

 

int main() {

    int arr[100], n, i;

 

    // Input number of elements

    printf("Enter number of elements: ");

    scanf("%d", &n);

 

    // Input array elements

    printf("Enter %d elements:\n", n);

    for (i = 0; i < n; i++) {

        scanf("%d", &arr[i]);

    }

 

    // Call merge sort function

    mergeSort(arr, 0, n - 1);

 

    // Display sorted array

    printf("\nSorted array in ascending order:\n");

    for (i = 0; i < n; i++) {

        printf("%d ", arr[i]);

    }

 

    printf("\n");

    return 0;

}

Output

 
INPUT :
Enter number of elements: 6
Enter 6 elements:
12 11 13 5 6 7

OUTPUT 2 :
Sorted array in ascending order:
5 6 7 11 12 13

Explanation

  1. Divide – The array is recursively divided into two halves until each subarray contains only one element.
  2. Conquer – Each subarray is then merged back together in sorted order using the merge()
  3. Combine – The process continues until all subarrays merge into a fully sorted array.

 

Algorithm Steps

  1. Find the middle point to divide the array into two halves.
  2. Recursively call mergeSort() for the first half and the second half.
  3. Merge the two sorted halves using merge().