题目描述
给你一个整数数组 nums,请你将该数组升序排列。
加粗样式
示例 1:
输入:nums = [5,2,3,1]
输出:[1,2,3,5]
示例 2:
输入:nums = [5,1,1,2,0,0]
输出:[0,0,1,1,2,5]
提示:
1 <= nums.length <= 50000
-50000 <= nums[i] <= 50000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sort-an-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
快排
import java.util.Random;
public class Solution {
public int[] sortArray(int[] nums) {
int len = nums.length;
quickSort(nums, 0, len - 1);
return nums;
}
private void swap(int[] nums, int index1, int index2) {
int temp = nums[index1];
nums[index1] = nums[index2];
nums[index2] = temp;
}
private void quickSort(int[] nums, int left, int right) {
if (left >= right) return;
// 随机选一个数当作pivot
// Random random = new Random();//默认构造方法
// int randomIndex = left + random.nextInt(right-left+1);
// swap(nums, left, randomIndex);
// 取left的位置当作pivot
int lo = left+1;
int hi = right;
while (lo<=hi) {
// 如果lo指的位置比pivot大 就将lo hi置换
if (nums[lo]>nums[left]) {
swap(nums, lo, hi);
hi--;
} else {
// lo确实比pivot小 lo指针向后移动
lo++;
}
}
lo--;
//把pivot放回中间
swap(nums, left, lo);
quickSort(nums, left, lo-1);
quickSort(nums, lo+1, right);
}
}