hullabaloon
8/9/2017 - 3:47 AM

sorts numbers

sorts numbers

import java.util.Scanner;

/**
 * This class implements MergeSort
 * @author Unknown
 *
 */
public class MergeSort {
	/** Array for mergeSort*/
    private int[] array;
    /** Temp Merge Array*/
    private int[] tempMergArr;
    /** Length of the array*/
    private int length;

    /**
     * Sorts inputArr with merge sort algorithm
     * 
     * @param inputArr Array to be sorted
     */
    public final void sort(int inputArr[]) {
        this.array = inputArr;
        this.length = inputArr.length;
        this.tempMergArr = new int[this.length];
        this.mergeSort(0, this.length - 1);
    }

    /**
     * Partitions Array into recursively smaller pieces
     *
     * @param lowerIndex lower bound to include in the first partition
     * @param higherIndex upper bound to include in the third partition
     */
    private void mergeSort(int lowerIndex, int higherIndex) {
        if (lowerIndex < higherIndex) {
            int middle = lowerIndex + (higherIndex - lowerIndex) / 2;
            // Below step sorts the left side of the array
            this.mergeSort(lowerIndex, middle);
            // Below step sorts the right side of the array
            this.mergeSort(middle + 1, higherIndex);
            // Now merge both sides
            this.mergeParts(lowerIndex, middle, higherIndex);
        }
    }

    /**
     * Merges partitions
     *
     * @param lowerIndex The lower index
     * @param middle The middle index
     * @param higherIndex The higher index
     */
    private void mergeParts(int lowerIndex, int middle, int higherIndex) {
        for (int i = lowerIndex; i <= higherIndex; i++) {
            this.tempMergArr[i] = this.array[i];
        }
        int i = lowerIndex;
        int j = middle + 1;
        int k = lowerIndex;
        while (i <= middle && j <= higherIndex) {
            if (this.tempMergArr[i] <= this.tempMergArr[j]) {
                this.array[k] = this.tempMergArr[i];
                i++;
            } else {
                this.array[k] = this.tempMergArr[j];
                j++;
            }
            k++;
        }
        while (i <= middle) {
            this.array[k] = this.tempMergArr[i];
            k++;
            i++;
        }

    }

    /**
     * Gets input to sort
     *
     * @return unsorted array of integers to sort
     */
    public static int[] getInput() {
        final int numElements = 6;
        int[] unsorted = new int[numElements];
        Scanner input = new Scanner(System.in);
        System.out.println("Enter any 6 Numbers for Unsorted Array : ");
        for (int i = 0; i < numElements; i++) {
            unsorted[i] = input.nextInt();
        }
        input.close();
        return unsorted;
    }

    /**
     * Main Method
     *
     * @param args Command line arguments
     */
    public static void main(String args[]) {
        int[] inputArr = getInput();
        MergeSort mergeSort = new MergeSort();
        mergeSort.sort(inputArr);
        for (int i : inputArr) {
            System.out.print(i);
            System.out.print(" ");
        }
    }
}