LiuL0703 / blog

https://liul0703.github.io
38 stars 11 forks source link

JavaScript排序算法实现 #10

Open LiuL0703 opened 6 years ago

LiuL0703 commented 6 years ago

快排

function quickSort(arr){
    if(arr.length === 0) return [];
    var l = [];
    var r= [];
    var m = ~~(arr.length/2);
    var flag = arr.splice(m,1);
    for(let i = 0; i < arr.length; i++){
        arr[i] < flag ? l.push(arr[i]): r.push(arr[i]);
    }
    return quickSort(l).concat(flag,quickSort(r));
}

quickSort([5,4,3,2,7,1])   // [1,2,3,4,5,7]

冒泡

function bubbleSort(arr){
    for(let i = 0; i < arr.length; i++){
    for(let j = 0; j < arr.length - 1 - i; j++){
        if(arr[j]>arr[j+1]){
        [arr[j],arr[j+1]] = [arr[j+1],arr[j]];
            }
    }
    }
    return arr;
}

选择排序

var selectSort = function(arr){
  for(var i = 0; i < arr.length; i++){
    var min_index = i;
    for(var j = i+1; j < arr.length; j++){
      if(arr[min_index]>arr[j]){
        min_index = j;
      }
    }
    [arr[min_index],arr[i]] = [arr[i],arr[min_index]];
  }
  return arr;
}

归并排序

function merge(left, right){
    const res = [];
    while(left.length > 0 && right.length > 0 ) {
         if(left[0] > right[0]) {
             res.push(right.unshift());
         }else{
             res.push(left.unshift());
        }
    }
    if(left.length > 0){
        res.concat(left);
    }
    if(right.length > 0){
        res.concat(right);
    }
    return res;
}

function mergeSort(arr){
    const lens = arr.length;
    if(len < 2) {
        return arr;
    }
    const mid = ~~(lens / 2);
    const left = mergeSort(arr.slice(0,mid));
    const right = mergeSort(arr.slice(mid));

    return merge(left,right);
}