冒泡排序
function bubble_sort(arr){
let length = arr.length
for(let i = 0; i < length; i++){
for(let j = 0; j < length - i -1; j++){
if(arr[j] > arr[j+1]){
[arr[j], arr[j+1]] = [arr[j+1], arr[j]]
}
}
}
return arr
}
选择排序
function selection_sort(arr){
let length = arr.length
for(let i = 0; i < length; i++){
for(let j = i+1; j < length; j++){
if( arr[i] > arr[j]){
[arr[i], arr[j]] = [arr[j], arr[i]]
}
}
}
return arr
}
插入排序
function insertion_sort(arr){
let length = arr.length
for(let i = 1; i < length; i++){
for(let pre = i-1; pre >= 0; pre--){
if(arr[pre] > arr[pre + 1]){
[arr[pre], arr[pre+1]] = [arr[pre + 1], arr[pre]]
continue
}
break
}
}
return arr
}
快速排序
function quick_sort(arr){
if (arr.length <= 1) return arr
let left = [], right = []
let index = Math.floor(Math.random() * arr.length)
for( let item of arr){
if (item < arr[index]){
left.push(item)
}else{
right.push(item)
}
}
return [...quick_sort(left), ...quick_sort(right)]
}
归并排序
function merge_sort(arr){
if( arr.length < 2) return arr
let middle = Math.floor( arr.length / 2),
left = arr.slice(0, middle),
right = arr.slice(middle)
return merge( merge_sort( left), merge_sort(right))
}
function merge(left, right){
let res = []
while(left.length && right.length){
if( left[0] < right[0]){
res.push(left.shift())
}else{
res.push(right.shift())
}
}
if(left.length){
return res.concat(left)
}else{
return res.concat(right)
}
}