[路飞]_js算法:leetcode 912. 排序数组-快速排序(指针)

146 阅读1分钟

leetcode 912. 排序数组-快速排序(指针)

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

思路: 快速排序 单边递归(递归性能差,这样既可以更好的理解程序,也能解决一部分性能问题)

/**
 * @param {number[]} nums
 * @return {number[]}
 */
var sortArray = function(nums) {
    return quickSort(nums,0,nums.length-1);
};
// 快速排序
function quickSort(arr,l,r){
  if(l>=r)return arr;
  while(l<r){
    let x=l,y=r,base=getMid(arr[l],arr[Math.floor((l+r)/2)],arr[r]);
  do{
    while(arr[x]<base)x++;
    while(arr[y]>base)y--;
    if(x<=y){
      [arr[x],arr[y]]=[arr[y],arr[x]];
      x++;
      y--;
    }
  }while(x<=y);
  quickSort(arr,x,r);
    r=y
  }
  return arr
}
function getMid(l,mid,r){
  if(l>r)[l,r]=[r,l];
  if(l>mid)[l,mid]=[mid,l];
  if(mid>r)[r,mid]=[mid,r];
  return mid
}