几种常见排序算法
冒泡排序
从小到大排 两个两个排序,这样最大的就在后面,下楼排序就排除最后一个,每次循环减一即可,还可以加一个状态,只要有一个状态不变,顺序是正确的
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])