各种排序复习。

一、 归并排序(merge sort)

主要思路为 将数组分两部分,左边的排好序,右边的排好序,然后再合并到一起(merge)

function mergeSort(arr){
    let len=arr.length;
    if(len===1) return arr;
    let left=arr.slice(0,Math.ceil(len/2));
    let right=arr.slice(Math.ceil(len/2));
    return merge(MergeSort(left),MergeSort(right));
}

function merge(left,right){
    if(left===null) return right;
    if(right===null) return left;
    if(left[0]<right[0]){
        return [left[0]].concat(merge(left.slice(1),right));
    }else{
        return [right[0]].concat(merge(left,right.slice(1)));
    }
}

二、 快速排序(quick sort)

主要思路为先取中点,然后遍历,比中点值小的排到中点左边,比中点大的排到右边,然后递归一下中点左边的子数组和中点右边的子数组。(注意,递归一定要写出口,否则会爆栈!)

function quickSort(arr){
  if(arr.length===0 || arr.length===1) return arr;
}
  let mid=Math.ceil(arr.length/2);
  let midPoint=arr[mid];
  arr.splice(mid,1);
  let left=[],right=[];
  for(let item of arr){
  item<=midPoint?left.push(item):right.push(item);
}
  return [].concat(quickSort(left),midPoint,quickSort(right));
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容