题目描述
给你一个整数数组 nums,请你将该数组升序排列。
题解
需要熟练掌握的两种排序方法,快速排序和归并排序
1、快速排序
class Solution {
public int[] sortArray(int[] nums) {
quickSort(nums, 0, nums.length - 1);
return nums;
}
public void quickSort(int[] nums, int left, int right){
if (left > right) return;
int tmp = nums[left];
int l = left, r = right;
while (l < r){
while (l < r && nums[r] >= tmp) r--;
while (l < r && nums[l] <= tmp) l++;
if (l < r){
int x = nums[l];
nums[l] = nums[r];
nums[r] = x;
}
}
nums[left] = nums[l];
nums[l] = tmp;
quickSort(nums, left, l - 1);
quickSort(nums, l + 1, right);
}
}
2、归并排序
class Solution {
public int[] sortArray(int[] nums) {
int[] tmp = new int[nums.length];
megerSort(nums, 0, nums.length - 1, tmp);
return nums;
}
public void megerSort(int[] nums, int left, int right, int[] tmp){
if (left >= right) return;
int mid = (left + right) / 2;
megerSort(nums, left, mid, tmp);
megerSort(nums, mid + 1, right, tmp);
int i = 0, j = left, k = mid + 1;
while (j <= mid && k <= right){
if (nums[j] < nums[k]){
tmp[i++] = nums[j++];
}else{
tmp[i++] = nums[k++];
}
}
while (j <= mid){
tmp[i++] = nums[j++];
}
while (k <= right){
tmp[i++] = nums[k++];
}
for (int t = 0; t < i; t++){
nums[left + t] = tmp[t];
}
return;
}
}