- 冒泡排序
function bubbleSort(array){
const len = array.length
// 一共要进行的次数由外层循环决定
for(let i = 0 ; i array[j+1]){
[array[j],array[j+1]] = [array[j+1],array[j]]
}
}
}
console.log(array)
return array
}
const a = [5,3,4,6,9,7,1]
bubbleSort(a)//[1, 3, 4, 5, 6, 7, 9]
- 选择排序
// 从待排序数据中寻找最小值,将其与序列最左边的数字交换
function selectSort(array){
const len = array.length
let minIndex
for(let i = 0 ; i < len ; i++){
minIndex = i
for(let j = i ; j
- 插入排序
// 插入排序就是从右侧未排序区域内取一个数据,
// 然后将它插入到已排序区域内合适的位置
function insertSort(array){
const len = array.length
for(let i = 1 ; i0&&array[j-1]>temp){
array[j] = array[j-1]
j--
}
// 退出while循环时,j刚好位于插入位置
array[j] = temp
}
console.log(array)
return array
}
const a = [5,3,4,6,9,7,1]
insertSort(a)//[1, 3, 4, 5, 6, 7, 9]
- 快速排序
// 快排的观念是分治,选取一个只,将所有小于它的只放在左边,大于他的值放在右边
// 对于左边和右边的子集,同样处理,直到子集只剩下一个元素
function quickSort(array){
const len = array.length
if(len<2) return array
const left = [] ,right = []
let pivotIndex = len/2|0
// 避免重复,先将当前值从数组中取出
let pivot = array.splice(pivotIndex,1)[0]
for(let val of array){
if(val < pivot){
left.push(val)
}else{
right.push(val)
}
}
return quickSort(left).concat([pivot],quickSort(right))
}
const a = [5,3,4,6,9,7,1]
console.log(quickSort(a))//[1, 3, 4, 5, 6, 7, 9]
- 归并排序
// 分治 (nlogn)
function merge(left,right){
let arr = []
while(left.length&&right.length){
if(left[0]