Click here to Skip to main content
14,237,550 members
Rate this:
Please Sign up or sign in to vote.
See more:
How does function work in case of merge sort?
I can't understand on what condition it moves to next step.

partition(arr,low,mid);
partition(arr,mid+1,high);
mergeSort(arr,low,mid,high);


#include <stdio.h>
#define MAX 50

void mergeSort(int arr[],int low,int mid,int high);
void partition(int arr[],int low,int high);

int main(){

    int merge[MAX],i,n;

    printf("Enter the total number of elements: ");
    scanf("%d",&n);

    printf("Enter the elements which to be sort: ");
    for(i=0;i<n;i++){
         scanf("%d",&merge[i]);
    }

    partition(merge,0,n-1);

    printf("After merge sorting elements are: ");
    for(i=0;i<n;i++){
         printf("%d ",merge[i]);
    }

   return 0;
}

void partition(int arr[],int low,int high){

    int mid;

    if(low<high){
         mid=(low+high)/2;
         partition(arr,low,mid);
         partition(arr,mid+1,high);
         mergeSort(arr,low,mid,high);
    }
}

void mergeSort(int arr[],int low,int mid,int high){

    int i,m,k,l,temp[MAX];

    l=low;
    i=low;
    m=mid+1;

    while((l<=mid)&&(m<=high)){

         if(arr[l]<=arr[m]){
             temp[i]=arr[l];
             l++;
         }
         else{
             temp[i]=arr[m];
             m++;
         }
         i++;
    }

    if(l>mid){
         for(k=m;k<=high;k++){
             temp[i]=arr[k];
             i++;
         }
    }
    else{
         for(k=l;k<=mid;k++){
             temp[i]=arr[k];
             i++;
         }
    }

    for(k=low;k<=high;k++){
         arr[k]=temp[k];
    }
}
Posted
Updated 23-Mar-13 0:58am
v3
Comments
Richard MacCutchan 23-Mar-13 6:31am
   
Your question is not clear, please provide more detail of your problem.
_duDE 23-Mar-13 7:09am
   
He means surely not short but sort ;) I have fixed it!

1 solution

Rate this:
Please Sign up or sign in to vote.

Solution 1

Merge sort or mergesort is a simple but efficient sort algorithm that splits the list into two sublists, sorts each one, then combines them into a single sorted list. It has good worst-case performance and requires only sequential access, making it ideal for sequential data structures like linked lists.

Please note that the function "partition" is reqursive; that means, it calls itself and divide the array of unsorted integers as long till parts of array are sorted.
The function mergeSort just assemble (or merge) the sorted parts together.
   

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)




CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100