Merge Sort Algorithm

Merge Sort is a Divide and Conquer algorithm. It divides the input array into two halves and then merges the two sorted halves.


Algorithm:

MergeSort(a[], l, r)
If r > l
  1. Find the middle point to divide the array into two halves: middle m = (l+r)/2.
  2. Call mergeSort for the first half: Call mergeSort(a, l, m).
  3. Call mergeSort for the second half: Call mergeSort(a, m+1, r).
  4. Merge the two halves sorted in step 2 and 3: Call merge(a, l, m, r).
The following diagram:


Source code in Java:

class MergeSort
{
     // Merge two subarray of a[].
     // First subarray is a[l...m].
    //  Second subarray is a[m+1....r].  

   void merge(int a[], int l, int m, int r)
   {
        int n1 = m-l+1;
        int n2 = r-m;

       // Create temp array.

       int L[] = new int[n1];
       int R[] = new int[n2];

      // Copy data

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

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

      // Copy remaining list of L[] if any
      while(i < n1)
      {
               a[k] = L[i];
           i++;
           k++;
      }
      
      // Copy remaining list of R[] if any
      while(i < n2)
      {
               a[k] = R[j];
           j++;
           k++;
      }
   }

// Sort array 

   void sort(int a[], int l, int r)
  {
         if(l < r)
        {
             int m = (l+r)/2;

             sort(a, l, m);
             sort(a, m+1, r);

             // Merge the sorted halves
             merge(a, l, m, r);
         }
   }

   static void printArray(int a[])
   {
          int n = a.length;
          for(int i=0;i<n;i++)
               System.out.print(a[i]+" ");
          System.out.println();
    }

    public static void main(String arg[])
    {
               int a[] = {29,10,14,37,13};
           
          System.out.println("Given Array);
          printArray(a);

          MergeSort obj = new MergeSort();
              obj.sort(a,0,a.length-1);

          System.out.println("\nSorted array");
          printArray(a);
     }
}


Output:

Given array is
29 10 14 37 13

Sorted  array is
10 13 14 29 37           
      

Comments

Popular posts from this blog

How to Build REST API Using PHP

AVL Tree Rotations

Disjoint Set (Union-Find)