Movatterモバイル変換


[0]ホーム

URL:


Skip to content
DEV Community
Log in Create account

DEV Community

Sumeet M
Sumeet M

Posted on • Edited on

     

Merge Sort in C

Merge Sort is a Divide and Conquer algorithm which sorts given set of elements recursively.

Merge Sort

Pseudocode of merge sort can be written as follows:

//A->array, l->left most index, r->right most indexMERGE-SORT(A, l, r)//function named “MERGE-SORT” to sort the array “A”, with the lower bound “l” and upper bound “r” and splits the array later into two parts.    if  l < r        mid = (l+(r-l)/2)    MERGE-SORT(A, l, mid)// Function call keeps on splitting the left part of the array till single element is achieved.    MERGE-SORT (A, mid+1, r)// Function call keeps on splitting the right part of the array till single element is achieved..    MERGE(A, l, mid ,r)end funcMERGE(A, l, mid, r)    nL = mid-l+1 //nL tells the max number of elements in the array L    nR = r-mid //nR tells the max number of elements in the array R    Create arrays L[1..nL+1] and R[1..nR+1]    for  i=0 to nL-1        L[i] = A[l+i]   end for    for j=0 to nR-1 // adds elements to the initial array A        R[j] = A[m+l+j]    end for    i=0;  j=0;  k=l;    while  i < nL and j < nR  // adds elements to the initial array A        if  L[i] <= R[j]            A[k]=L[i];  i=i+1;  k=k+1;        else            A[k]=R[j];  j=j+1;  k=k+1;    end while    while  i < nL  // adds elements to the initial array A        A[k]=L[i];  i=i+1;  k=k+1;    end while    while  j < nR  // adds elements to the initial array A        A[k]=R[j];  j=j+1;  k=k+1;    end whileend func
Enter fullscreen modeExit fullscreen mode

Merge Sort Explained:

C program for Merge Sort

#include<stdlib.h> #include<stdio.h> // Merges two subarrays of arr[ ]. // First subarray is arr[l..m] // Second subarray is arr[m+1..r] void merge(int arr[ ], int l, int m, int r) {     int i, j, k;     int n1 = m - l + 1;     int n2 = r - m;     /* create temp arrays */    int L[n1], R[n2];     /* Copy data to temp arrays L[ ] and R[ ] */    for (i = 0; i < n1; i++)         L[i] = arr[l + i];     for (j = 0; j < n2; j++)         R[j] = arr[m + 1+ j];     /* Merge the temp arrays back into arr[l..r]*/    i = 0; // Initial index of first subarray     j = 0; // Initial index of second subarray     k = l; // Initial index of merged subarray     while (i < n1 && j < n2)     {         if (L[i] <= R[j])         {             arr[k] = L[i];             i++;         }         else        {             arr[k] = R[j];             j++;         }         k++;     }     /* Copy the remaining elements of L[], if there     are any */    while (i < n1)     {         arr[k] = L[i];         i++;         k++;     }     /* Copy the remaining elements of R[], if there     are any */    while (j < n2)     {         arr[k] = R[j];         j++;         k++;     } } /* l is for left index and r is right index of the sub-array of arr to be sorted */void mergeSort(int arr[], int l, int r) {     if (l < r)     {         // Same as (l+r)/2, but avoids overflow for         // large l and h         int m = l+(r-l)/2;         // Sort first and second halves         mergeSort(arr, l, m);         mergeSort(arr, m+1, r);         merge(arr, l, m, r);     } } /* UTILITY FUNCTIONS *//* Function to print an array */void printArray(int A[ ], int size) {     int i;     for (i=0; i < size; i++)         printf("%d ", A[i]);     printf("\n"); } /* Driver program to test above functions */int main() {     int arr[] = {12, 11, 13, 5, 6, 7}; // or you can take input direct from the user itself using scanf function    int arr_size = sizeof(arr)/sizeof(arr[0]);     printf("Given array is \n");     printArray(arr, arr_size);     mergeSort(arr, 0, arr_size - 1);     printf("\nSorted array is \n");     printArray(arr, arr_size);     return 0; }
Enter fullscreen modeExit fullscreen mode

Top comments(0)

Subscribe
pic
Create template

Templates let you quickly answer FAQs or store snippets for re-use.

Dismiss

Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment'spermalink.

For further actions, you may consider blocking this person and/orreporting abuse

  • Joined

More fromSumeet M

DEV Community

We're a place where coders share, stay up-to-date and grow their careers.

Log in Create account

[8]ページ先頭

©2009-2025 Movatter.jp