数组 - 冒泡排序
解析:
以从小到大排序为例:
- 内层循环,将数组中相邻的两个元素进行比较。将比较大的元素放在后一位。执行一遍内层循环后,数组中最大的值就会排到最后面。
- 再增加一层外层循环,使内层循环不断重复,依次将每次循环中找到的最大值往后移。
- 优化:内层循环的次数是 数组长度 - 外层循环次数 。因为每一次的内层循环,都会将最大值移动到最后面,所以下一次的内层循环,无需比较上次循环排到最后的那个数。
示意图:
代码示例:
var arr = [1, 3, 6, 9, 7, 8, 4, 2, 1]// 外层循环,重复内层循环for (var i = 0; i < arr.length; i++) {// 内层循环,将最大的值排到最后方for (var j = 0; j < arr.length - i; j++) {// 如果上一位比下一位大,则把较大的值放到下一位if (arr[j] > arr[j + 1]) {var keep = arr[j]arr[j] = arr[j + 1]arr[j + 1] = keep}}}console.log(arr) // [1, 1, 2, 3, 4, 6, 7, 8, 9]
数组 - 去重
原生简易去重
var arr = ['12', '32', '89', '12', '12', '78', '12', '32']// 最简单数组去重法function unique(array) {var n = [] //一个新的临时数组for (var i = 0; i < array.length; i++) {//遍历当前数组if (n.indexOf(array[i]) == -1) n.push(array[i])}return n}console.log(unique(arr)) // [ '12', '32', '89', '78' ]
es6去重
// es6方法数组去重function unique(array) {return [...new Set(array)]}// es6方法数组去重,第二种方法function dedupe(array) {return Array.from(new Set(array)) // Array.from() 能把set结构转换为数组}
