public int[] sort(final int[] array) {
        oneOperation();
        if (array.length == 1) {
            return array;
        }
        if (array.length == 2) {
            if (array[0] < array[1]) {
                return array;
            }
            return swap(array, 0, 1);
        }

        int[] left = sort(Arrays.copyOfRange(array, 0, (int)Math.floor(array.length/(float)2)));
        int[] right = sort(Arrays.copyOfRange(array, (int)Math.floor(array.length/(float)2), array.length));
        return mergeArrays(left, right);
    }