数组 - 冒泡排序

解析:

以从小到大排序为例:

  • 内层循环,将数组中相邻的两个元素进行比较。将比较大的元素放在后一位。执行一遍内层循环后,数组中最大的值就会排到最后面。
  • 再增加一层外层循环,使内层循环不断重复,依次将每次循环中找到的最大值往后移。
  • 优化:内层循环的次数是 数组长度 - 外层循环次数 。因为每一次的内层循环,都会将最大值移动到最后面,所以下一次的内层循环,无需比较上次循环排到最后的那个数。

示意图:

19126126-b47d1bd7bcfddeab.gif

代码示例:

  1. var arr = [1, 3, 6, 9, 7, 8, 4, 2, 1]
  2. // 外层循环,重复内层循环
  3. for (var i = 0; i < arr.length; i++) {
  4. // 内层循环,将最大的值排到最后方
  5. for (var j = 0; j < arr.length - i; j++) {
  6. // 如果上一位比下一位大,则把较大的值放到下一位
  7. if (arr[j] > arr[j + 1]) {
  8. var keep = arr[j]
  9. arr[j] = arr[j + 1]
  10. arr[j + 1] = keep
  11. }
  12. }
  13. }
  14. console.log(arr) // [1, 1, 2, 3, 4, 6, 7, 8, 9]

数组 - 去重

原生简易去重

  1. var arr = ['12', '32', '89', '12', '12', '78', '12', '32']
  2. // 最简单数组去重法
  3. function unique(array) {
  4. var n = [] //一个新的临时数组
  5. for (var i = 0; i < array.length; i++) {
  6. //遍历当前数组
  7. if (n.indexOf(array[i]) == -1) n.push(array[i])
  8. }
  9. return n
  10. }
  11. console.log(unique(arr)) // [ '12', '32', '89', '78' ]

es6去重

  1. // es6方法数组去重
  2. function unique(array) {
  3. return [...new Set(array)]
  4. }
  5. // es6方法数组去重,第二种方法
  6. function dedupe(array) {
  7. return Array.from(new Set(array)) // Array.from() 能把set结构转换为数组
  8. }