11 Dec 2017

write a program for merge sort.


public class MergeSort {

          private int[] array;
          private int[] tempMergArr;
          private int length;

          public static void main(String a[]) {

                   int[] inputArr = { 2, 5, 2, 8, 5, 6, 8, 8 };
                   MergeSort mms = new MergeSort();
                   mms.sort(inputArr);
                   System.out.println("Sorted lis is ::");
                   for (int i : inputArr) {
                             System.out.print(i);
                             System.out.print(" ");
                   }
          }

          public void sort(int inputArr[]) {
                   this.array = inputArr;
                   this.length = inputArr.length;
                   this.tempMergArr = new int[length];
                   doMergeSort(0, length - 1);
          }

          private void doMergeSort(int lowerIndex, int higherIndex) {

                   if (lowerIndex < higherIndex) {
                             int middle = lowerIndex + (higherIndex - lowerIndex) / 2;
                             // Below step sorts the left side of the array
                             doMergeSort(lowerIndex, middle);
                             // Below step sorts the right side of the array
                             doMergeSort(middle + 1, higherIndex);
                             // Now merge both sides
                             mergeParts(lowerIndex, middle, higherIndex);
                   }
          }

          private void mergeParts(int lowerIndex, int middle, int higherIndex) {

                   for (int i = lowerIndex; i <= higherIndex; i++) {
                             tempMergArr[i] = array[i];
                   }
                   int i = lowerIndex;
                   int j = middle + 1;
                   int k = lowerIndex;
                   while (i <= middle && j <= higherIndex) {
                             if (tempMergArr[i] <= tempMergArr[j]) {
                                      array[k] = tempMergArr[i];
                                      i++;
                             } else {
                                      array[k] = tempMergArr[j];
                                      j++;
                             }
                             k++;
                   }
                   while (i <= middle) {
                             array[k] = tempMergArr[i];
                             k++;
                             i++;
                   }

          }
}

Output:
Sorted list is ::

2 2 5 5 6 8 8 8