一孽亲、 歸并排序(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));