直接上可运行的代码备忘:
```javascript
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>数组排序</title>
</head>
<body>
<div>数组排序</div>
</body>
</html>
<script>
let testArr = [3,54,1,50,30,55,80,20,0,11,35,201]
// let testArr = [1,2,3,4,5,6,8]
function bubbleArr(arr) {
for (let i = 0; i < arr.length-1; i++) {
for (let j = 0; j < arr.length-1-i; j++) {
if (arr[j] > arr[j+1]) { // >升序,<降序
[arr[j], arr[j+1]] = [arr[j+1], arr[j]] // 结构赋值
console.log(arr);
}
}
}
return arr
}
// console.log('冒泡排序,一个一个比较', bubbleArr(testArr));
function quickArr(arr) {
if (arr.length<2) {
return arr
}
let [mid, left, right] = [arr.splice(Math.floor(arr.length/2), 1), [], []]
console.log('mid', mid);
for (let i = 0; i < arr.length; i++) {
if (arr[i] < mid) {
left.push(arr[i])
}else {
right.push(arr[i])
}
}
return quickArr(left).concat(mid, quickArr(right))
}
// console.log('快速排序,对半比较', quickArr(testArr));
function insertSort(arr){
let temp, j
for(let i=1; i<arr.length; i++){
if(arr[i-1] > arr[i]){
[temp, j] = [arr[i], i-1]
arr[i] = arr[j]
while(j>=0 && arr[j]> temp){ //比较大小,找到插入的位置
arr[j+1] = arr[j]
j--
}
arr[j+1] = temp //插入
}
}
return arr
}
// console.log('插入排序,从后比前', insertSort(testArr) );
function selectArr(arr) {
let min, minInd
for (let i = 0; i < arr.length; i++) {
[min, minInd] = [arr[i], i]
for (let j = i+1; j < arr.length; j++) {
min>arr[j]? [min, minInd] = [arr[j], j]: ''
}
arr.splice(i, 0, min)
arr.splice(minInd+1, 1)
}
return arr
}
// console.log('选择排序,单个进行比较', selectArr(testArr) );
let testArr2 = [3,54,1,20,50,0,11,35,201]
testArr2.sort(function (a,b) {
return a-b;
})
// console.log('sort排序', testArr2);
function mergeArr(arr) {
let len = arr.length
if(len < 2) {
return arr
}
let middle = Math.floor(len / 2)
left = arr.slice(0, middle)
right = arr.slice(middle)
return merge(mergeArr(left), mergeArr(right))
}
function merge(left, right){
let result = []
while (left.length && right.length) {
if (left[0] <= right[0]) {
result.push(left.shift());
} else {
result.push(right.shift());
}
}
while (left.length){
result.push(left.shift());
}
while (right.length){
result.push(right.shift());
}
return result;
}
// console.log('递归排序,类比二分', mergeArr(testArr) );
</script>