package com.interview.sort; /** * http://en.wikipedia.org/wiki/Merge_sort * Test cases * 1 element * 2 element * negative numbers * already sorted * reverse sorted */ public class MergeSort { public void sort(int input[]){ sort(input, 0, input.length-1); } private void sort(int input[], int low, int high){ if(low >= high){ return; } int middle = (low + high)/2; sort(input, low, middle); sort(input, middle+1, high); sortedMerge(input,low,high); } private void sortedMerge(int input[], int low, int high){ int middle = (low+high)/2; int temp[] = new int[high-low+1]; int i = low; int j = middle+1; int r = 0; while(i <= middle && j <= high){ if(input[i] <= input[j]){ temp[r++] = input[i++]; }else{ temp[r++] = input[j++]; } } while(i <= middle){ temp[r++] = input[i++]; } while(j <= high){ temp[r++] = input[j++]; } i = low; for(int k=0; k < temp.length;){ input[i++] = temp[k++]; } } public void printArray(int input[]){ for(int i : input){ System.out.print(i + " "); } System.out.println(); } public static void main(String args[]){ int input1[] = {1}; int input2[] = {4,2}; int input3[] = {6,2,9}; int input4[] = {6,-1,10,4,11,14,19,12,18}; MergeSort ms = new MergeSort(); ms.sort(input1); ms.sort(input2); ms.sort(input3); ms.sort(input4); ms.printArray(input1); ms.printArray(input2); ms.printArray(input3); ms.printArray(input4); } }