private static void merge(Comparable[] a, Comparable[] aux, int lo, int mid, int hi){
        //set starting points
        int i=lo, j=mid+1;

        //copy all elmts to tmp buffer
        for( int k = lo; k <= hi; ++k ){
            aux[k] = a[k];
        }

        //copy the next smallest elmt to the end of sorted portion
        for( int k = lo; k <= hi; ++k ){
            if     ( i > mid )                      a[k] = aux[j++];
            else if( j > hi )                       a[k] = aux[i++];
            else if( Helper.less(aux[j], aux[i]) )  a[k] = aux[j++];
            else                                    a[k] = aux[i++];
        }
    }