冒泡排序、快速排序、选择排序、插入排序

85 阅读1分钟
  1. 冒泡排序:比较相邻的两个元素,如果前一个比后一个大则交换位置一轮结束后最后一个就是最大的等到循环全部执行完毕就排好了。
let arr = [1, 55, 103, 3, 2, 99, 100, 134, 201, 220, 23, 16]
function bubbleStor (arr) {
    for(let i = 0; i < arr.length-1; i++){
        for(let j = 0; j < arr.length-1-i; j++) {
            if(arr[j+1] < arr[j]) {
                let item = arr[j]
                arr[j] = arr[j+1]
                arr[j+1] = item
            }
        }
    }
}
  1. 选择排序:假设数组第一个元素为最小的记录它的下标index然后将该元素和后面的元素进行比较如果后面的元素比当前元素小则将index更换为较小元素的下标,一轮比较结束后index中的值为数组中最小元素的下标然后将下标为0的元素和下标为index的元素位置互换;再从下标为1的元素开始重复上述动作。
let arr = [1, 55, 103, 3, 2, 99, 100, 134, 201, 220, 23, 16]
function SelectStor (arr) {
    for(let i = 0; i < arr.length; i++){
        let index = i
        for(let j = i + 1; j < arr.length; j++) {
            if(arr[j] < arr[i]) {
                index = j
            }
        }
        let item = arr[index]
        arr[index] = arr[i]
        arr[i] = item
    }
    return arr
}
  1. 快速排序:先找到一个基准点(一般为数组的中部)然后数组被该基准点分为两部分依次与该基准点数字进行比较,如果比它小放左边反之放右边;左右分别放一个空数组去存放比较后的数据最后递归执行上述操作。
  • 写法一
function quickSort(arr) {
  if(arr.length <= 1) return arr
  var midIndex = Math.floor(arr.length / 2)
  var mindVal = arr.splice(midIndex, 1)
  var left = []
  var right = []
  for(var i = 0; i < arr.length; i++) {
    arr[i] < mindVal ? left.push(arr[i]) : right.push(arr[i])
  }
  return quickSort(left).concat(mindVal, quickSort(right))
}
  • 写法二
quickSort(arr) {
  quick(arr, left, right)
  return arr
},
function quick(arr, left, right) {
  if(arr.length > 1) {
    let index = partition(arr, left, right)
    if(left < index-1) {
      quick(arr, left, index-1)
    }
    if(index < right) {
      quick(arr, index, right)
    }
  }
},
function partition(arr, left, right) {
  let pivot = arr[Math.fool((left + right) / 2)]
  let i = left
  let j = right
  while(i <= j) {
    while(arr[i] <= pivot) {
      i++
    }
    while(arr[j] <= pivot) {
      j--
    }
    if(i <= j) {
      swap(arr, i, j)
      i++
      j--
    }
  }
  return i
},
function swap(arr, i, j){
  let item = arr[i]
  arr[i] = arr[j]
  arr[j] = item
}
  1. 插入排序:假定第一项已经排序了,接着用它和第二项进行比较判断第二项是应该待在原位还是插到第一项之前,这样头两项就已正确排序,接着和第三项比较(判断它是该插入到第一第二还是第三的位置),以此类推。
function insertionSort(arr) {
  for(i = 1; i < arr.length; i++) {
      let j = i;
      let temp = arr[i]
      while(j > 0 && arr[j-1] > temp) {
          arr[j] = arr[j-1]
          j--
      }
      arr[j] = temp
  }
  return arr
}