Getting wrong output in merge sort

public class mergeSort
{
public static void main(String[] args)
{
int[] arr = {4,3,2,1};
int[] ans = mergeSort(arr,0,arr.length-1);
for(int p =0;p<ans.length;p++)
{
System.out.print(ans[p] + " ");
}
}
public static int[] mergeTwoSortedArrays(int[] arr1, int[] arr2)
{
int[] merged = new int[arr1.length + arr2.length];
int i = 0;
int j = 0;
int k = 0;

	while (i<arr1.length && j<arr2.length)
	{
		if(arr1[i] <= arr2[j])
		{
			merged[k] = arr1[i];
			i++;
			k++;  
		}
		else
		{
			merged[k] = arr2[j];
			j++;
			k++;
		}
	}
	if(i==arr1.length)
	{
		while(j<arr2.length)
		{
			merged[k] = arr2[j];
			j++;
			k++;  
		}
	}
	if(j==arr2.length)
	{
		while(i<arr1.length)
		{
			merged[k] = arr2[i];
			i++;
			k++;  
		}
	}
	return merged;
}

public static int[] mergeSort(int[] arr, int lo, int hi)
{
	if(lo==hi)
	{
		int[] br = new int[1];
		br[0] = arr[lo];
		return br;
	}
	int mid = (lo + hi)/2;
	int[] fh = mergeSort(arr,lo,mid);
	int[] sh = mergeSort(arr,mid+1,hi);

	int[] merge = mergeTwoSortedArrays(fh,sh);
	return merge;
}

}

output :- 1 1 1 1

You needn’t return arrays from merge and mergesort arrays. Use the original array to divide it into 2 parts. But don’t return anything from merge and mergesort.