package sort;
import java.util.*;
import java.io.*;
public class MergeSort
{
public static int times;
public void mergeSort (Comparable [] data,int min,int max)
{
if (min==max) return;
int pivot = (min+max)/2;
mergeSort(data,min,pivot);
mergeSort(data,pivot+1,max);
merge(data,min,pivot,max);
}
private void merge(Comparable [] data,int min,int pivot ,int max) {
Comparable temp[] ;
int left ;
int right;
int size = max-min+1;
temp = new Comparable[size];
for (int i=0; i<size; i++)
{
temp[i] = data[min+i];
}
// merge the 2 sorted lists
left = 0;
right = pivot-min+1;
for (int i=0;i<size;i++)
{
times++;
if(right<=max-min)
if (left<=pivot-min)
if (temp[left].compareTo(temp[right])>0)
data[i+min] = temp[right++];
else
data[i+min] = temp[left++];
else
data[i+min] = temp[right++];
else
data[i+min] = temp[left++];
}
}
public static void main(String [] args) throws IOException
{
String inString ;
StringTokenizer tokenizer;
Integer [] elements;
MergeSort ms = new MergeSort();
BufferedReader in = new BufferedReader( new InputStreamReader(System.in));
System.out.println("Please input the size ( size>0 ): ");
inString = in.readLine();
elements = new Integer[Integer.parseInt(inString)];
System.out.println("Enter the numbers of elements :(gap it with Key_space or Key_tab) ");
inString = in.readLine();
tokenizer = new StringTokenizer(inString);
for (int i =0; i<elements.length && tokenizer.hasMoreTokens();i++)
{
elements[i] = Integer.parseInt(tokenizer.nextToken());
}
long startTime = System.currentTimeMillis();
ms.mergeSort(elements,0,elements.length-1);
System.out.println("after sorted :");
for (int i=0;i<elements.length;i++)
{
System.out.println(elements[i]);
}
System.out.println("take time = "+(System.currentTimeMillis()-startTime));
System.out.println("size : "+elements.length+" , cursory times : "+times);
}
}