class Solution {
public int[] sortArray(int[] nums) {
int n = nums.length;
int[] temp = new int[n];
mergeSort(nums,0,n - 1,temp);
return nums;
}
private void mergeSort(int[] nums, int left, int right, int[] temp) {
if(left == right){
return;
}
int mid = (left + right) / 2;
mergeSort(nums,left,mid,temp);
mergeSort(nums,mid + 1,right,temp);
if(nums[mid] <= nums[mid + 1]){
return;
}
mergeOfTwoSortedArrays(nums,left,mid,right,temp);
}
private void mergeOfTwoSortedArrays(int[] nums, int left, int mid,int right, int[] temp) {
for(int i =left;i <= right;i++){
temp[i] = nums[i];
}
int i = left, j = mid + 1;
for(int k = left; k <= right;k++){
if(i == mid + 1){
nums[k] = temp[j];
j++;
}else if(j == right + 1){
nums[k] = temp[i];
i++;
} else if(temp[i] <= temp[j]){
nums[k] = temp[i];
i++;
}else {
nums[k] = temp[j];
j++;
}
}
}
}