快速-插入-选择-排序

104 阅读1分钟

快速排序

var list = [7,8,6,5,10,13,14,100,99,98,101]

function fast(list) {
 if(!list.length) return []
 let left = [],right = []
 let point = list.shift()
 for(let i=0;i<list.length;i++) {
  list[i]<point ? left.push(list[i]) : right.push(list[i])
}
return fast(left).concat(point,fast(right))
}

fast(list)

解析

  • 通过构造左右两个数组不断shift取出数组第一个 进行大小比较
  • 小的放入left其余的放入right
  • 不断递归concat拼接
  • !list.length的时候终止完成排序

选择排序

  • 选择排序没有冒泡排序那么频繁 只有选中小的值的时候才会进行交换
  • 最小的依次从左排列
  • 冒泡排序是不断把最大值排到右边去从小到大
function choose(arr) {
  for(let i=0;i<arr.length;i++) {
    let min  = arr[i]
    for(let j=i+1;j<arr.length;j++) {
      if(arr[j]<min) {
        let val = min
        min = arr[j]
        arr[j] = val
      }
      arr[i] = min 
    }
  }
  return arr
}

插入排序

function insertSort (arr) {
  var len = arr.length
  var prev, current
  for (var i = 1; i < len; i++) {
    prev = i - 1
    current = arr[i]
    while (prev >= 0 && arr[prev] > current) {
      arr[prev + 1] = arr[prev];
      prev--
    }
    arr[prev + 1] = current
  }
  return arr
}
  • 从数组的第二个数据开始往前比较,即一开始用第二个数和他前面的一个比较,如果 符合条件(比前面的大或者小,自定义),则让他们交换位置。

  • 因为每次都是排列奥当前的数据内部while循环给 prev排好位置

  • 外面直接arr[prev+1] = current 当前的current就排序到了对应的位置