排序算法
冒泡排序:
// 冒泡
var arr = [1, 78, 3, 6, 9, 2, 5, 4, 7, 8];
// 确定每一轮的比较次数,每次比较都会对比两个数大小,如果后面的数比前面的大就交换位置
// 第一轮可以确定一个最大的数,第二轮可以确定第二大的数,第三轮可以确定第三大的数,以此类推
// 轮到最后一轮,最后一轮只有一个数,不需要比较,所以比较次数为arr.length - 1
for (let i = 0; i < arr.length - 1; i++) {
// arr.length - 1 - i 为每一轮的比较次数,因为每比较完一轮,都会确定一个最大数,所以每比较完就少一个比较
for (let j = 0; j < arr.length - 1 - i; j++) {
// 交互数字位置
const element = arr[j]; // 原数字
if (element > arr[j + 1]) {
// arr[j] = arr[j + 1]; // 后一个数字
// arr[j + 1] = element; // 原数字
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]; // 简化写法
}
}
}
console.log(arr); // (10) [1, 2, 3, 4, 5, 6, 7, 8, 9, 78]
选择排序:
// 选择排序是一种简单的排序算法,它的工作原理是每一趟从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
var arr = [1, 78, 3, 6, 9, 2, 5, 4, 7, 8];
// 一轮比较完成后,最小的数字会被放在最前面 所以轮数为 arr.length - 1
for (let i = 0; i < arr.length - 1; i++) {
let minIndex = i; // 记录一个最小的下标
// 记录当前这一轮的最小值
// i + 1 拟定为下一轮的最小值
for (let j = i + 1; j < arr.length; j++) {
// 如果当前这一轮的最小值比下一轮的最小值大,就重新赋值(记录)一个最小值
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
// 每轮交换位置,将记录下的最小值放在最前面
if (minIndex !== i) {
[arr[i], arr[minIndex]] = [arr[minIndex], arr[i]];
}
}
console.log(arr); //(10) [1, 2, 3, 4, 5, 6, 7, 8, 9, 78]
后续还会继续补充更多算法,敬请关注~