三大排序算法
冒泡算法
- 循环数组,当前项与后一项进行比较,大于就交换
- 每一次循环,最后一项一定是最大的

let arr = [3, 2, 1, 2, 3]
function bubbling(arr) {
for (let i = 0; i < arr.length-1; i++) {
for (let j = 0; j < arr.length - i-1; j++) {
if (arr[j] > arr[j + 1]) {
let temp = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = temp
}
}
}
return arr
}
console.log(bubbling(arr))
插入算法排序
- 取出第一项,存入一个新数组
- 循环除第一项外其他项,其他项大于新数组中的任意项,则存入任意项的末尾
- 其他项不大于新数组中的每一项则存入开头
let arr = [3, 2, 1, 2, 3]
function insert(arr) {
let newArr = [arr[0]]
for (let i = 1; i < arr.length; i++) {
for (let j = newArr.length - 1; j >= 0; j--) {
if (arr[i] > newArr[j]) {
newArr.splice(j + 1, 0, arr[i])
break
}
if (j === 0) {
newArr.unshift(arr[i])
}
}
}
return newArr
}
console.log(insert(arr))
快速算法排序
- 使用递归
- 找到数组中间项并在原数组中移除
- 准备左右两个数组
- 循环原数组,比中间项大的放右边,反之左边
function rapid(arr) {
if(arr.length<=1)return arr
let middleValue = arr.splice(Math.floor(arr.length / 2), 1)[0]
let L = []
let R = []
for (let i = 0; i < arr.length; i++) {
arr[i]>middleValue?R.push(arr[i]):L.push(arr[i])
}
return rapid(L).concat(middleValue,rapid(R))
}
let arr = [3, 2, 1, 2, 3]
console.log(rapid(arr))