几种常见排序算法


冒泡排序

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

复制代码
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   sss大辉  阅读(12)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示