js 中比较常见的排序算法.md

冒泡排序

思想: 一次比较元素的的大小,小的与大的进行位置上的调换

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

快速排序

思路:参考某个元素值,将小于他的值,放在左数组中,大于它的值放在右数组中,然后递归进行上一次左右数组的操作,返回合并的数组就是已经排序好的数组。

function quickSort(arr) {
  if(arr.length <=1 ) {
    return arr;
  }

  let leftArr = [],
      rightArr = [],
      quick = arr[0];

  for(let i = 0, len = arr.length; i < len; i ++) {
    if (this[i] > quick) {
      this.rightArr.push(this[i]);
    } else {
      this.leftArr.push(this[i])
    }
  }

  return [].contat(quickSort(leftArr), [quick], quickSort(rightArr));
}

插入排序

思路:

  1. 从第一个元素开始,该元素可以被认为已经被排序
  2. 取出下一个元素,在已经排序的元素序列中从后向前扫描
  3. 如果该元素(已排序)大于新元素,将该元素移到下一个位置
  4. 重复第三个步骤,直到已经找到已排序小于或者等于新元素的位置
  5. 将新元素插在该位置的后面
  6. 重复2-5
Array.prototype.insertion_sort = function() {
  for(let i = 1, len = this.length; i < len; i ++) {
    for(let j = 0; j < i; j ++) {
      if(this[j] > this[i]) {
        this.splice(j, 0, this[i]);
        this.splice(i+1, 1)
      }
    }
  }
  return this;
};

[3,5,2,11,1,2].insertion_sort();

posted @ 2017-11-06 16:07  little小龙女  阅读(159)  评论(0编辑  收藏  举报