let a = [5, 4, 3, 16, 2, 6, 8, 9, 1];
// 冒泡排序:从第一个开始遍历,和后面的数字进行比较,大的数放到后面。
const bubbleSort = arr => {
let len = arr.length;
for (let i = 0; i < len; i++) {
for (let j = i + 1; j < len; j++) {
if (arr[i] > arr[j]) {
[arr[i], arr[j]] = [arr[j], arr[i]];
}
}
}
return arr;
};
// 插入排序:将当前遍历到的数据和前面的数据进行对比,并插入到对应的位置。注意一直都能保持前面的数据都是有序的
const insertSort = arr => {
let len = arr.length;
for (let i = 1; i < len; i++) {
let j = i;
let temp = arr[i]; // 临时存放需要比较的值
while (j > 0) {
if (arr[j - 1] > temp) {
// 值大于需要比较的值,则把该值往后挪一位,给temp腾位置
arr[j] = arr[j - 1];
} else {
break;
}
j--;
}
arr[j] = temp;
}
return arr;
};
// 快速排序思路:使用递归思路
// 小的放左边 + 中间值(选择的第一个元素) + 大的放右边 --- 一直递推,直到结束
const quickSort = arr => {
const rec = trr => {
if (trr.length < 2) {
return trr;
}
let mid = trr[0];
let leftArr = [];
let rightArr = [];
for (let i = 1; i < trr.length; i++) {
// 下表从从第一个开始
if (trr[i] < mid) {
// 小的放左边
leftArr.push(trr[i]);
} else {
rightArr.push(trr[i]);
}
}
return [...rec(leftArr), mid, ...rec(rightArr)];
};
return rec(arr);
};