Introduction:
Merge sort is a divide and conquer algorithm.
Conceptually, a merge sort works as follows
- Divide the unsorted list recursively into n sublists, each containing 1 element (a list of 1 element is considered sorted).
- Repeatedly Merge sublists to produce new sublists until there is only 1 sublist remaining. This will be the sorted list.
The program of Merge Sort in java is given below:
Java Code for Merge Sort:
import java.io.*;
public class MergeSort{
private int[] arr; //stores array of elements
private int[] temp; //used for temporarily storing elements
private int num; //number of elements
public static void main(String[] args){
MergeSort x=new MergeSort();
x.sort();
}
public void sort(){
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
try{
System.out.print("Enter total no. of numbers: ");
num=Integer.parseInt(br.readLine());
arr=new int[num];
temp=new int[num];
System.out.println("Enter the numbers: ");
for(int i=0;i<num;i++){
System.out.print("Enter number "+i+": ");
arr[i]=Integer.parseInt(br.readLine());
}
}catch(IOException e){
e.printStackTrace();
}
mergeSort(0,num-1);
for(int i=0;i<num;i++)
System.out.println(i+" : "+arr[i]);
}
public void mergeSort(int low,int high){
//merge sort
if(low<high){
int mid=(low+high)/2; //finds the mid position of the array
mergeSort(low,mid); //merge sort the first part
mergeSort(mid+1,high); //merge sort the last part
merge(low,mid,high); //merge the two parts
}
}
public void merge(int low,int mid,int high){
//merge the two parts
for(int i=low;i<=high;i++)
temp[i]=arr[i];
int i=low;
int j=mid+1;
int k=low;
//selects the smaller element from the two parts
//and fill the array accordingly
while(i<=mid && j<=high){
if(temp[i]<=temp[j]){
arr[k++]=temp[i];
i++;
}
else{
arr[k++]=temp[j];
j++;
}
}
//fills the rest of the elements into the array
while(i<=mid)
arr[k++]=temp[i++];
}
}
Conclusion:
If the running time of merge sort for a list of length n is T(n), then the recurrence T(n) = 2T(n/2) + n follows from the definition of the algorithm. In sorting n objects, merge sort has an average and worst case performance of O(n log n).
References: http://en.wikipedia.org/wiki/Merge_sort
If you have any questions regarding the post please use the comments below. ![]()