算法技能如今越来越被看重,今天开始把平时记录的一些关于JS算法的题目做一下记录,弥补自己在这一项的缺陷。
数组去重
- 先来说说比较容易想到的方法:
1 | function unique(arr){ |
该方中的indexOf
兼容性需要考虑;
- 利用Object中key的唯一性,利用key来进行筛选:
1 | function unique(arr){ |
- 排序后去重:
1 | function unique(arr){ |
对象根据属性排序
arrayObject.sort(sortby)
,sortby
非必填但必须为一个函数,规定排序顺序。这里嵌套一层函数用来接收对象属性名,其他部分代码与正常使用sort方法相同:
如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:
- 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
- 若 a 等于 b,则返回 0。
- 若 a 大于 b,则返回一个大于 0 的值。
1 | var arr = [ |
取数组中最大差值
- 该方法很容易想到,就是找到最大的值减去最小的值即可得到:
1 | function getMax(arr){ |
排序
冒泡排序
- 比较简单的排序算法,说白了就是把相邻的两个元素拿来比较大小并重复进行,如果后面的比前面的小,把小的放在前面。
- 时间复杂度:O(n2)
- 具体算法描述如下:
- 比较相邻的元素。如果第一个比第二个大,就交换它们两个;
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
- 针对所有的元素重复以上的步骤,除了最后一个;
- 重复步骤1~3,直到排序完成。
1 | function bubbleSort(arr){ |
选择排序
- 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
- 时间复杂度:O(n2)
1 | function findMin(arr,first){ |
快速排序
- 在数据集之中,选择一个元素作为”基准”(pivot)
- 所有小于”基准”的元素,都移到”基准”的左边;所有大于”基准”的元素,都移到”基准”的右边
- 对”基准”左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止
1 | function quickSort(arr){ |