package numbersorter;

import java.util.*;
/*Nathan Hughes - 1809708  
public class NumberSorter {
    
    public static int[] NumberInput() {
        Scanner scan = new Scanner(System.in);
        
        System.out.println("Enter number of numbers to input:");
        int n = scan.nextInt();
        int[] array = new int[n];
        for (int i =0; i< n; i++) {
            int testDup; /* testing integer for duplicates */
            boolean dup = false; /* duplicate truth value*/
            System.out.println("Enter number " + (i+1));
            testDup = scan.nextInt();
            for (int j=0;j<i; j++) {
                if (testDup == array[j]) {
                    System.out.println("You have entered a duplicate, please try again.");
                    i--;
                    dup = true;
                    break;
                }
            } if (dup == false) { /* only inputs into array if no duplicate found*/
                array[i] = testDup;
            }
        }
        return array;
    }
    
    public static void SortingFunction(int[] array) {
        MinimumFinder(array);
        MaximumFinder(array);
        SumFinder(array);
        OrderAsc(array);
        OrderDesc(array);
    }
    
    public static void MinimumFinder(int[] array) {    
        /* Finding minimum */
        int min = array[0];
        for (int i =0; i < array.length; i++) {
            if (array[i] < min) {
                min = array[i];
            }
        }
        System.out.println("The minimum is " + min);
    }
    
    public static void MaximumFinder(int[] array) {    
        /*Finding maximum*/
        int max = array[0];
        for (int i =0; i < array.length; i++) {
            if (array[i] > max) {
                max = array[i];
            }
        }
        System.out.println("The maximum is " + max);
    }
    
    public static void SumFinder(int[] array) {
        int sum = 0;
        for (int i=0; i< array.length; i++) {
            sum = sum + array[i];
        }
        System.out.println("The sum of the numbers is " +sum);
    }
    /*The code from lines 70 to 113 were written by me on November the 6th*/
    static int[] merge(int[] arr, int start, int mid, int end) {

        int[] temp = new int[end-start+1]; //temp array
        int i = start;
        int j = mid+1;
        int k = 0;

        while(i <= mid && j <= end) {
            if(arr[i] <= arr[j]) {
                temp[k] = arr[i];
                k+=1;
                i+=1;
            } else {
                temp[k] = arr[j];
                k+=1;
                j+=1;
            }
        }
        while(i <= mid) {
                temp[k] = arr[i];
                k += 1; 
                i += 1;
            }
        while(j <= end) {
                temp[k] = arr[j];
                k += 1; 
                j += 1;
        }

        for(i = start; i <= end; i += 1) {
            arr[i] = temp[i - start];
        }
        return arr;
    }
    
    static int[] sort(int[] arr, int start, int end) {
        if (start< end) {
            int middle = (int) Math.ceil((start+end)/2);
            sort(arr,start,middle);
            sort(arr,middle+1,end);
            merge(arr,start,middle,end);
        }
        return arr;
    }    
   
    public static void OrderAsc(int[] array) {
        System.out.printf("In ascending order:\r\n(");
        for (int i=0; i< array.length; i++) {
            System.out.print(sort(array, 0, array.length-1)[i] + " ");
         }
        System.out.print(")");
    }
    
    public static void OrderDesc(int[] array) {
        System.out.printf("\r\nIn descending order:\r\n(");
        for (int i=0; i< array.length; i++) {
            System.out.print(sort(array, 0, array.length-1)[array.length-i-1] + " ");
        }
        System.out.print(")");
    }
          
    public static void main(String[] args) {
        int [] x = NumberInput();
        SortingFunction(x);
    }
}

/* I have tested this program, but I removed them instead of commenting them out. I don't know why I did that. */