JavaScript 数组去重排序

数组去重

1const arr = [9, 9, 0, 0, 2, 3, 2, 3, 5]
2const a = []
3arr.forEach((item, index, arr) => {
4  if (!a.includes(item)) {
5    // if(a.includes(item)){ // 或
6    a.push(item)
7  }
8})

冒泡排序

1// 二重循环,外层循环控制比较次数,内层,两两相邻进行比较换位,谁大谁换到后一位
2for (let i = 0; i < arr.length; i++) {
3  for (let j = 0; j < arr.length - i; j++) {
4    // 循环相邻两位比较,外层每走一次,内层的循环最大值,就减小 i
5    // 内层循环进行相邻的两两比较
6    if (arr[j] > arr[j + 1]) {
7      // 如果前一项大于后一项,进行换位
8      // 引入第3个变量,才能进行两个变量的值的交互
9      const temp = arr[j]
10      arr[j] = arr[j + 1]
11      arr[j + 1] = temp
12    }
13  }
14}

选择排序

1for (let i = 0; i < arr.length; i++) {
2  // 外层循环,控制每次选择的下标
3  for (let j = i + 1; j < arr.length; j++) {
4    // 内层循环,控制 i 下标的后续下标
5    if (arr[i] > arr[j]) {
6      // 比较选择的下标值和后续的下标的值,谁小就将谁换到选择的下标上来,然后在用选择的下标上换来的值和后续下标值进行比较
7      const temp = arr[i]
8      arr[i] = arr[j]
9      arr[j] = temp
10    }
11  }
12}

递归排序

1function qSort(arr) {
2  // 当 lArr 或 rArr 中只有一个数据项或没有数据项时,就返回该数组本身边界条件
3  if (arr.length <= 1)
4    return arr
5
6  // 获取中间下标值
7  const mIndex = Math.floor(arr.length / 2)
8  // 截取中间下标对应的值
9  const mVal = arr.splice(mIndex, 1)[0]
10  // 创建左右空数组
11  const lArr = []
12  const rArr = [] // 千万不能 var lArr = rArr = [];
13  // 遍历数组中剩余的数据项,当该数据项小于 mVal 就放到 lArr 中,当大于 mVal 就放到 rArr
14  for (let i = 0; i < arr.length; i++) {
15    if (arr[i] < mVal)
16      lArr.push(arr[i])
17    else
18      rArr.push(arr[i])
19  }
20  // 合并返回新数组,切对 lArr 数组和 rArr 数组进行递归
21  return qSort(lArr).concat(mVal, qSort(rArr))
22}