数组去重
let ary = [10, 11, 15, 20, 21, 25, 26, 17, 18, 19, 10, 25];
// 又是一种数组去重的方案
ary.sort((a, b) => a - b);
ary = ary.join("@") + "@";
let reg = /(\d+@)\1*/g;
arr = [];
ary.replace(reg, (val, group1) => {
arr.push(Number(group1.slice(0, group1.length - 1)));
});
console.log(arr);
// 拿出当前项与后面的进行比较
for (var i = 0; i < ary.length - 1; i++) {
let item = ary[i];
let arrs = ary.slice(i + 1);
let agy = [];
if (arrs.indexOf(item) > -1) {
//包含: 我们可以把当前项干掉
// splice 删除
// 存在一个问题 原来的数组改变 i++了,会出现数组塌陷的问题
// arr.splice(i, 1); 第一种
// i--; // 删除当前项之后,让 i 继续减减操作 解决了数组塌陷的问题
// arrs[i] = null; 第二种
// ary[i] = ary[ary.length - 1];
// ary.length--;
// i--; 第三种
}
}
// ary = ary.filter(item => item !== null);
冒泡排序
原理 : 一轮轮的比较 每一轮都从第一项开始,拿出当前项和后一项进行比较 如果 A>B 则进行交换位置. 每一次比较都会有一个最大的一项排到后面去
function bubble(ary) {
let temp = null;
// 外层循坏I控制比较的轮数
for (let i = 0; i < ary.length - 1; i++) {
for (let j = 0; j < ary.length - 1 - i; j++) {
if (ary[j] > ary[j + 1]) {
// 当前项目大于后一项
temp = ary[j];
ary[j] = ary[j + 1];
ary[j + 1] = temp;
}
}
}
return ary;
}
let ary = [12, 10, 5, 17, 19, 12, 5];
ary = bubble(ary);
console.log(ary);
快速排序的思路:
// 容器 => 手 先抓一张 8,新抓的牌比手里的某张牌大, 则把当前的牌放到手里这张牌的后面
// 12
// 8 12
// 8 12 24
// 8 12 16 24
// 比到头都没有发现比他更小的,直接放在手里第一个位置即可
代码如下:
```
// 快速排序:
function quick(ary) {
// 4. 结束递归(当ary的length小于等于一项,则不用处理)
if (ary.length <= 1) {
return ary;
}
// 1. 找到数组的中间项,在原有的数组中把它移除
let middleIndex = Math.floor(ary.length / 2);
let middleValue = ary.splice(middleIndex, 1)[0];
//2. 准备左右两个数组,循坏剩下的数组的每一项, 比当前项小的放到左边的数组中
// 反之放到右边的数组中
let aryLeft = [];
aryRight = [];
for (let i = 0; i < ary.length; i++) {
let item = ary[i];
item < middleValue ? aryLeft.push(item) : aryRight.push(item);
}
return quick(aryLeft).concat(middleValue, quick(aryRight));
}
let ary = [12, 8, 15, 16, 11, 24];
quick(ary);
```