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

Basics of System Design

This article is first one from the series of articles dedicated to system design interviews. Here i am going to present the base scenario to consider before starting to solve system design problems.
Questions to ask?
1) what is the number of requests a website will recieve in a day/month/second? 2) what is the amount of memory a website will deal in a day/month/second? 3) what is the number of servers that can accomodate these requests?
To answer this , first we need to remember the below numbers:-
1 million = 10 lakh = 1000000 = 10^6 1 billion = 1000 million = 10^9
1 KB = 1024 B = 10^31 MB= 10^6 = 1024 KB 1 GB= 10^9 = 1024 MB1 TB = 10^12 = 1024 GB
Memory we need to see in BytesRequests we need to see in numbers
example :-
suppose a website recieves 100M requests every month then:-
requests per day = request per month /24 = 416700 requests requests per second = requests per day / (24*3600) = 4.8 requests per second
memory:-
if we take 20:80 principal where 20 percent is write and 80 percent is …

Calculating size of User and Cache storage

user storage:-
it can be solved using same scenario as mentioned in first article .

https://tech.nazarmubeenworks.com/2019/08/basics-of-system-design-chapter-0.html


Suppose there are 12 Million of users are adding every year meaning 1 Million per month.
So if we consider 5 year there will be around 60 million of users. Now in terms of data we can look to our DB table and get information about it. A user will be generally having name , id , address , some forien keys .
Lets assume 10 columns with each column on an average storing 4 byte of data.
10*4 = 40 bytes of data for one user.
60 * 10^6 * 40 = 2400 * 10^6 = 2.4 * 10^9 = 2.4 GB of data we need to store only user values.
Also while calculating storage for the user there is also one important point we need to remember is of ids. If we are going to have 60 Million of users which means 60*10^6 users so unique id’s will be
as we know below figures are almost equal
2^10=10^3 then 60*(10^3)^2 = 2^20 *2^6
which means we almost need 26 …