题目
给你一个整数数组 nums,请你将该数组升序排列。
示例1
输入: nums = [5,2,3,1]
输出: [1,2,3,5]
题解
API大法
var sortArray = function(nums){
return nums.sort((a,b)=>a-b)
}
归并排序
- 排序算法核心通过尽量少的比较将数据放在合适的位置
- 归并排序采用分治思想,每次将数组分为左右两个部分,对左右两步排序
- 排序过程中对左右两个部分在细分为左右两部分
- 先细分,和递归的回来的时候将左右两部分合并成有序的数组
- 返回合并后的数组即可
归并排序代码
//归并排序
var sortArray = function(nums) {
//获取数组长度
const len = nums.length;
//如果数组长度小于2返回数组
if(len < 2) return nums;
// 否则分割数组
const mid = len >> 1;//右移1位,类似除以2
// 递归分解左侧数组
const left = sortArray(nums.slice(0,mid));
// 递归分解右侧数组
const right = sortArray(nums.slice(mid,len))
// 合并左右两个数组
return merge(left,right);
// 合并数组
function merge(left,right){
let l = 0;
let r = 0;
let list = [];
while(l < left.length && r < right.length){
if(left[l] < right[r]){
list.push(left[l])
l++
}else{
list.push(right[r])
r++
}
}
list = list.concat(left.slice(l,left.length));
list = list.concat(right.slice(r,right.length));
return list
}
};