You are on page 1of 3

import java.util.

*;
public class Merge_sort{
static int count ;
public static void main(String[] args) {

for(int k=10;k<=50;k+=5){
int[] arr1 = new int[k]; //best
int[] arr2 = new int[k]; //worst
count = 0;

//ascending
for(int i=0;i<k;i++){
arr1[i] = i+1;
}
//decending
int i=0;
for(int j=k; j>0 ; j--){
arr2[i++]= j;
}

//for arr1

int n1 = arr1.length;
// Merge_sort ms = new Merge_sort();
long Start_time = System.nanoTime();
M_sort(arr1,0, arr1.length-1);
long End_time = System.nanoTime();
// System.out.println("sorted arrays is:"+"" );
System.out.println("best case time : " + i + " - " + k + ":"+
(End_time-Start_time));
System.out.println("number of merge calls is - " + i + "-" + count);
//Print_arr(arr1,n1);

//for arr2
int n2 = arr2.length;
// Merge_sort ms = new Merge_sort();
long S_time = System.nanoTime();
M_sort(arr1,0, arr2.length-1);
long E_time = System.nanoTime();
//System.out.println("sorted arrays is:"+"" );
System.out.println("worst case time "+ k + ":"+(E_time-S_time));
// Print_arr(arr2,n2);
System.out.println();

}
//int[] arr = { 10,30,20,40,80,50,60,90 };

}
private static void M_sort(int[] arr, int p, int r) {

if(p<r){

int q = (p+r) / 2 ;
M_sort(arr,p,q);
M_sort(arr,q+1,r);
count++;
Merge_Sort(arr,p,q,r);
}
}
static void Merge_Sort(int[]arr ,int p , int q , int r){
int n1 = q-p+1;
int n2 = r-q;
int[] L= new int[n1];
int[] R= new int[n2];

for(int i = 0;i<n1;i++){
L[i]=arr[p+i];
}
for(int j = 0;j<n2;j++){
R[j]=arr[q+j+1];
}
int i=0 , j=0 , k = p;

while(i<n1 && j<n2){


if(L[i]<=R[j]){
arr[k]=L[i];
i++;
}
else{
arr[k]=R[j];
j++;
}
k++;
}
while(i<n1){
arr[k]=L[i];
i++;
k++;
}
while(j<n2){
arr[k]=R[j];
j++;
k++;
}
// void M_sort(int[] arr,int p ,int r){
//
// }
// static void Print_arr(arr,n) {
//
// }

private static void Print_arr(int[] arr, int n) {


for (int i = 0; i < n; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}

// private static void Print_arr(int[] arr) {


//
// }
}

You might also like