** 以下排序只针对纯数字
冒泡排序
循环数组,当前值与后一项值作比较,如果当前值比后一项值大,则交换位置
function BubbleSort(arr) {
const list = [...arr]
Array(list.length - 1)
.fill()
.map(_ => {
list.map((v, index) => {
if (index < list.length && v > list[index + 1]) {
list.splice(index, 2, list[index + 1], v)
}
})
})
return list
}
复制代码
插入排序
准备一个新数组,循环数组,找到新数组中比当前值大的第一个值的索引,如果有,放到它前面,没有则放到新数组的最后
function InsertSort(arr) {
const list = []
arr.map(item => {
const index = list.findIndex(v => v > item)
index > -1 ? list.splice(index, 0, item) : list.push(item)
})
return list
}
复制代码
快速排序
准备两个新数组,每次拿出数组的第一个元素,循环数组,将比它大的放进右边一个新数组,反之放进左边的新数组,然后递归左边和右边的新数组,然后拼接数组
缺点:内存空间占用多
function QuickSort(list) {
if (list.length < 2) return list
const flag = list[0]
const leftList = []
const rightList = []
for (let i = 1; i < list.length; i++) {
list[i] > flag ? rightList.push(list[i]) : leftList.push(list[i])
}
return QuickSort(leftList).concat([flag], QuickSort(rightList))
}
复制代码