一、基础-冒泡
冒泡排序:
1. 两两比较,不符合规则就换位;
2. 把所有的数字换位之后可以得到极值,极值是在数组的最后方;
3. 比较的次数 : 数组的length - 1次;
4. 比较的轮数 : 数组的length - 1轮;
let arr = [3, 1, 4, 5, 2]
for (let k = 0; k < arr.length - 1; k++) {
for (let i = 0; i < arr.length - 1 - k; i++) {
// 一轮排序把最值放到了最后;
// 因为每一轮比较都有一个数字已经排列好了,没必要再和这个数字比对了;
if (arr[i] > arr[i + 1]) {
let temp = arr[i]
arr[i] = arr[i + 1]
arr[i + 1] = temp
}
}
}
二、sort-冒泡
Array.prototype.sort(compareFn
)
指明了 compareFn
后,数组会按照该函数的返回值排序。即 a 和 b 是两个将要被比较的元素:
- 如果
compareFn(a, b)
大于 0 , b 会被排列到 a 之前; - 如果
compareFn(a, b)
小于 0 ,那么 a 会被排列到 b 之前; - 如果
compareFn(a, b)
等于 0 , a 和 b 的相对位置不变。compareFn(a, b)
注意:compareFn(a, b) 必须总是 对相同的输入返回相同的比较结果,否则排序的结果将是不确定的。
// 将数组中符合规则的元素移动到数组末尾
// a: 后一项 b: 当前项
let arr = [10, 0, 3, 0, 1, 4]
arr.sort((a, b) => { return b === 0 ? -1 : 0 }) // [10, 3, 1, 4, 0, 0]