冒泡排序 O(n2)
【算法】排序算法之冒泡排序

function bubbleSort(arr) {
const len = arr.length
for(let i=0
for(let j=0
if(arr[j]>arr[j+1]) [arr[j], arr[j+1]] = [arr[j+1], arr[j]]
}
}
return arr
}
选择排序 O(n2)
【算法】排序算法之选择排序

function selectSort(arr) {
const len = arr.length
let minIndex
for(let i=0
minIndex = i
for(let j=i
if(arr[j]<arr[minIndex]) minIndex = j
}
if(minIndex !== i) [arr[i], arr[minIndex]] = [arr[minIndex], arr[i]]
}
return arr
}
插入排序 O(n2)
【算法】排序算法之插入排序

function insertSort(arr) {
for(let i=1
let j = i
while(j>=1 && arr[j-1] > arr[j]) {
[arr[j-1], arr[j]] = [arr[j], arr[j-1]]
j--
}
}
return arr
}
快排 O(nlogn)−O(n2)
【算法】排序算法之快速排序

function quickSort(arr) {
const len = arr.length
if(len<2) return arr
const cur = arr[len-1]
const left = arr.filter((value, index) => value <= cur && index !== len-1)
const right = arr.filter(value => value > cur)
return [...quickSort(left), cur, ...quickSort(right)]
}
归并排序 O(nlogn)
【算法】排序算法之归并排序

function merge(left, right) {
let res = []
let i = 0
let j = 0
while(i<left.length && j<right.length) {
if(left[i] < right[j]) {
res.push(left[i])
i++
} else {
res.push(right[j])
j++
}
}
if(i<left.length) {
res.push(...left.slice(i))
} else {
res.push(...right.slice(j))
}
return res
}
function mergeSort(arr) {
const len = arr.length
if(len<2) return arr
const mid = Math.floor(len/2)
const left = mergeSort(arr.slice(0, mid))
const right = mergeSort(arr.slice(mid))
return merge(left, right)
}