几种常见排序算法


冒泡排序

从小到大排 两个两个排序,这样最大的就在后面,下楼排序就排除最后一个,每次循环减一即可,还可以加一个状态,只要有一个状态不变,顺序是正确的

import { ref } from 'vue'
let arr1 = ref([])
const a1 = (arr: any) => {
  for (let i = 0; i < arr.length - 1; i++) {
    let flag = false
    for (let j = 0; j < arr.length - 1 - i; j++) {
      if (arr[j] > arr[j + 1]) {
        let temp = arr[j]
        arr[j] = arr[j + 1]
        arr[j + 1] = temp
        flag = true
      }
    }
    if (!flag) return arr
  }
  return arr
}
arr1.value = a1([3, 7, 2, 9, 4, 8, 1, 5, 6])

 

 

插入排序

从小到大排 默认第一个元素是排好的,从第二个元素开始循环,跟当前循环下标元素前面的数组循环比较,循环不可以超过下标0以及有比当前下标元素更小的值,满足条件的循环里,把循环的元素往后移,因为都比当前下标大。

let arr2 = ref([])
const a2 = (arr: any) => {
  for (let i = 1; i < arr.length; i++) {
    let curValue = arr[i]
    // let j = i - 1
    // while (j >= 0 && curValue < arr[j]) {
    //   arr[j + 1] = arr[j]
    //   j--
    // }
    // arr[j + 1] = curValue
    for (let j = 0; j < i ; j++) {
      if (arr[j] > curValue) {
        let temp = arr[j]
        arr[j] = curValue
        curValue = temp
      }
    }
    arr[i] = curValue
  }
  return arr
}
arr2.value = a2([3, 7, 2, 9, 4, 8, 1, 5, 6])

 

 

选择排序

从小到大排 从第一个元素开始,比较所有元素包含第一个元素,取得最小值,然后与第一个元素交换下标。然后以此类推,直到倒数第二个

let arr3 = ref([])
const a3 = (arr: any) => {
  for (let i = 0; i < arr.length - 1; i++) {
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[i] > arr[j]) {
        let temp = arr[i]
        arr[i] = arr[j]
        arr[j] = temp
      }
    }
  }
  return arr
}
arr3.value = a3([3, 7, 2, 9, 4, 8, 1, 5, 6])

 

 

快速排序

从小到大排 默认取数组第一个为基准点,把比它小的放一个数组里,大的又放另一个数组里,输出的时候,要递归左右两个数组即可

let arr4 = ref([])
const a4 = (arr: any) => {
  if (arr.length <= 1) {
    return arr
  }
  let curVaule = arr[0]
  let leftArr = []
  let rightArr = []
  for (let i = 1; i < arr.length; i++) {
    if (arr[i] < curVaule) {
      leftArr.push(arr[i])
    } else {
      rightArr.push(arr[i])
    }
  }
  return [...a4(leftArr), curVaule, ...a4(rightArr)]
}
arr4.value = a4([3, 7, 2, 9, 4, 8, 1, 5, 6])

 

posted on 2024-03-13 17:48  sss大辉  阅读(10)  评论(0编辑  收藏  举报

导航