js中手撕三种排序方式(冒泡、插入、快速)

166 阅读1分钟

冒泡

每一轮比较之后 当前数组中的最大值放到了最后

规律:一轮轮的比较,每一次都是从第一项开始,拿出当前项A和后一项B进行比较, 如果A>B 让两者交换位置

for (let i = 0; i < array.length-1; i++) {
  for (let j = 0; j < array.length-1 - i; j++) {
    if(array[j+1] < array[j]){
      let temp = array[j+1]
      array[j+1] === array[j]
      array[j] = temp
    }
  }
}

插入排序

规律:拿当前元素 与新数组元素进行对比 然后插入

let handle = []
handle.push(array[0])
for (let i = 1; i < array.length; i++) {
  let A = array[i];
  for (let j = handle.length - 1; j >= 0; j--) {
    let B = handle[j];
    if(A > B){
      handle.splice(j + 1, 0, A)
      break
    }
    if( j === 0){
      handle.unshift(A)
    }
    
  }
}

快速排序

规律:二分法

function sort(arr){
  if(arr.length <= 1){
    return arr
  }
  let middleIndex = Math.floor(arr.length / 2),
  leftArr = [],
  rightArr = [],
  middleValue = arr.splice(middleIndex, 1)[0]
  for (let i = 0; i < arr.length; i++) {
    arr[i] < middleValue ? leftArr.push(arr[i]) : rightArr.push(arr[i]) 
  }
  return sort(leftArr).concat(middleValue, sort(rightArr))
}