Skip to main content

Merge Sort Implementation in JAVA



Merge Sort  is a technique of sorting data with below steps:-

1) Divide the data recursively until it can not  divide more.

2)  Compare the data and sort it.

3) Merge the data again .




/*
 * Merge Sort is based on the concept below points:-
 * 1) Divide array until it can not be divide.
 * 2) Merge it again in sorted pattern 
 * 
 * 
 */


public class MergeSort {
 
 

 public static int[]  mergeSort(int arr[])
 {
  
  //check for size if it is one then already sorted
  int size=arr.length;
  if(size==1)
  {
   return arr;
  }
  
  //find middle (divide an array into two half)
  int mid=size/2;
  
  //first half
  int[] fhalf=new int[mid];
  //second half
  int[] shalf=new int[size-mid];
  
   // Copy first half of the array
     for (int i = 0; i < mid; i++)
     { fhalf[i] = arr[i];
     }
     // Copy second half of the array
     for (int i = mid; i < size; i++)
     { shalf[i - mid] = arr[i];
     }      
     
     //recursive call fhalf and shalf
     return merge(mergeSort(fhalf), mergeSort(shalf));
  
 }
 
 public static int[] merge(int[] firstHalfSorted,int[] secondHalfSorted)
 {
  // First, create a new array to store the answer. 
  
   int SortedArray[] = new int[firstHalfSorted.length + secondHalfSorted.length];
 

 

    int m = 0;
         int n = 0;
         int count = 0;
         
         System.out.println("first array");
         printArray(firstHalfSorted);
         System.out.println("second array");
         printArray(secondHalfSorted);
         //compare the elements in both arary
         while (m<firstHalfSorted.length && n<secondHalfSorted.length)
         {
             if (firstHalfSorted[m]>secondHalfSorted[n])
             {
                 SortedArray[count]=secondHalfSorted[n];
                 count++;
                 n++;
             }
             else if (firstHalfSorted[m]<secondHalfSorted[n])
             {
                 SortedArray[count]=firstHalfSorted[m];
                 count++;
                 m++;
             }
         }
         
         //append the remaining elements at the end
         if (m!=firstHalfSorted.length)
         {
             while(m<firstHalfSorted.length){
                 SortedArray[count]=firstHalfSorted[m];
                 count++;
                 m++;
             }
         }
         
         //append the remaining elements at the end
         if (n!=secondHalfSorted.length)
         {
             while(n<secondHalfSorted.length){
                 SortedArray[count]=secondHalfSorted[n];
                 count++;
                 n++;
             }
         }
         System.out.println("sorted array");
         printArray(SortedArray);
  // At last return the sorted array 
   return SortedArray;
 }

 
 public static void printArray(int[] arr)
 {
  //System.out.println("printing array");
  for(int i=0;i<arr.length;i++)
  {
   System.out.print(arr[i]+" ");
  }
  System.out.println(" ");
 }
 
 public static void main(String[] args)
 {
  int arr[]={14,33,27,10,25,19,40,45};
  printArray(arr);
  //calling merge function
  arr=mergeSort(arr);
  printArray(arr);
 }

}


Implementation Steps:-


14 33 27 10 25 19 40 45  
first array
14  
second array
33  
sorted array
14 33  
first array
27  
second array
10  
sorted array
10 27  
first array
14 33  
second array
10 27  
sorted array
10 14 27 33  
first array
25  
second array
19  
sorted array
19 25  
first array
40  
second array
45  
sorted array
40 45  
first array
19 25  
second array
40 45  
sorted array
19 25 40 45  
first array
10 14 27 33  
second array
19 25 40 45  
sorted array
10 14 19 25 27 33 40 45  
10 14 19 25 27 33 40 45  

Comments

.

Popular posts from this blog

BREADTH FIRST SEARCH IN JAVA

BREADTH FIRST SEARCH IN JAVA:- package com . problems . graph ; import java.awt.DisplayMode ; import java.util.Iterator ; import java.util.LinkedList ; public class BFSGraph { int maxsize ; Vertex vertexlist []; int matrixlist [][]; int vertexcount ; @SuppressWarnings ({ "rawtypes" , "unused" }) LinkedList queue ; public BFSGraph () { maxsize = 20 ; matrixlist = new int [ maxsize ][ maxsize ]; vertexlist = new Vertex [ maxsize ]; for ( int i = 0 ; i < maxsize ; i ++) { for ( int j = 0 ; j < maxsize ; j ++) { matrixlist [ i ][ j ]= 0 ; } } queue = new LinkedList (); } public void addVertex ( char label ) { vertexlist [ vertexcount ++]= new Vertex ( label ); } public void addEdge ( int i , int j ) { matrixlist [ i ][ j ]= 1 ; matrixlist [ j ][ i ]= 1 ; } public void displayVertex ( int v ) { System . out . println ( vertexlis

How to do Effective Programming?

There is no secret to doing effective programming but following a sequence of steps and procedures can help in building great programs. Today I will take you on a tour to some of the best practices that are integrants of perfect programs. Algorithms are important: - You can’t deny the fact that algorithms are important and before start to write any program, Algorithms are must to write. For example, if there is a program about finding the sum of two numbers? What will you write ?The steps can be :- 1)   Get the first number. 2)   Get the second number. 3)   Add both numbers. This is what algorithm is writing about ,a list of statements .From the above three statements you can conclude boundary cases (at least two number should be there in input), mathematical function(Sum is needed here) , storage capacity(amount of memory to be assign to the variables), number of methods by analyzing repeat steps (reduce replete codes) and many other things. During algorithm only yo