[路飞]_排序数组

197 阅读1分钟

912. 排序数组

题目

给你一个整数数组 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
    }

};