Merge Sort

Merge Sort

class MergeSort {

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

  public static void main(String a[]) {

    int[] inputArr = { 33, 26, 52, 88, 2, 95, 11, 25, 62, 1 };
    MergeSort mms = new MergeSort();
    mms.sort(inputArr);

    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++;

    }
  }
}