Sort an Array
Given an array of integers nums, sort the array in ascending order.
Example 1:
Input: nums = [5,2,3,1]
Output: [1,2,3,5]
Example 2:
Input: nums = [5,1,1,2,0,0]
Output: [0,0,1,1,2,5]
Constraints:
- 1 <= nums.length <= 50000
- -50000 <= nums[i] <= 50000
Solution:
class Solution {
public int[] sortArray(int[] nums) {
return sort(nums);
}
private int[] sort(int[] nums) {
// System.out.println(Arrays.toString(nums));
if (nums.length <= 1) return nums;
int mid = nums.length / 2;
int[] l = sort(Arrays.copyOfRange(nums, 0, mid));
int[] r = sort(Arrays.copyOfRange(nums, mid, nums.length));
return merge(l, r);
}
private int[] merge(int[] one, int[] two) {
int m = one.length, n = two.length;
int[] res = new int[m + n];
int l = 0, r = 0, i = 0;
while (l < m && r < n) {
if (one[l] < two[r]) {
res[i++] = one[l++];
} else {
res[i++] = two[r++];
}
}
if (l < m) {
while (i < res.length) {
res[i++] = one[l++];
}
}
if (r < n) {
while (i < res.length) {
res[i++] = two[r++];
}
}
return res;
}
}