题目描述
给你一个整数数组 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
- 排序方法sort:对数组的元素进行排序
代码1
var sortArray = function(nums){
return nums.sort((a, b) => a - b);
}
解题思路2
- 快速排序,先选择一个基准值
- 然后选择左右两个指针,分别向中间移动
- 把小于基准值的数放在左边,大于基准值的数放在右边
- 递归上述操作
代码2
var sortArray = function(nums){
quick(nums. 0, nums.length - 1);
return nums;
}
var quick = function(arr, l, r){
// 如果左指针的值大于右指针的值,那么就结束本次操作
if(l >= r) return ;
// 随意选择一个基准值,就选择数组的第一位
let x = l, y = r, base = arr[l];
while(x < y) {
// 如果左指针小于右指针,且右指针的值大于基准值,那么不交换,右指针左移
while(x < y && arr[y] >= base) y--;
// 右指针遇到小于基准值的时候,先赋值后x++,
if(x < y) arr[x++] = arr[y];
while(x < y && arr[x] < base) x++;
if(x < y) arr[y--] = arr[x];
}
// 将基准值放到中间位置
arr[x] = base;
quick(arr, l, x - 1);
quick(arr, x + 1, y);
return;
}
解题思路3
- 单边递归法
代码3
var sortArray = function(nums) {
quick(nums, 0, nums.length - 1);
return nums;
};
var quick = function(arr, l, r){
// 左边递归右边循环
while(l < r) {
let x = l, y = r, base = arr[l];
while(x < y) {
while(x < y && arr[y] >= base) y--;
if(x < y) arr[x++] = arr[y];
while(x < y && arr[x] < base) x++;
if(x < y) arr[y--] = arr[x];
}
arr[x] = base;
quick(arr, x + 1, r);
r = x - 1;
}
return;
}