01. sort原理

arr.sort([compareFunction])

  • 其中 compareFunction 用来指定按某种顺序进行排列的函数,如果省略不写,元素按照转换为字符串的各个字符的 Unicode 位点进行排序。 ```javascript const array1 = [1, 30, 4, 21, 100000];

array1.sort(); // [1, 100000, 21, 30, 4]

array1.sort((a,b) => a - b); // [1, 4, 21, 30, 100000]

  1. - n<=10 时,采用插入排序;
  2. - n>10 时,采用快速排序;
  3. ![image.png](https://cdn.nlark.com/yuque/0/2022/png/338495/1660057867595-3cfb1298-54e4-4327-a0f9-4277efe9fbd1.png#clientId=uc2de8c29-d2ab-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=185&id=u8e67e30d&margin=%5Bobject%20Object%5D&name=image.png&originHeight=407&originWidth=2000&originalType=binary&ratio=1&rotation=0&showTitle=false&size=81277&status=done&style=none&taskId=u5d3adfb4-6389-4548-85d4-e7b2d1e8ebe&title=&width=909.0908893868947)
  4. > 快速排序的性能瓶颈在于递归的深度,选择哨兵元素很重要,尽量是中位数
  5. <a name="z3uSV"></a>
  6. ## 02. 函数式编程
  7. - 函数是一等公民,可以作为函数的入参和返回值
  8. - 声明式编程 map/filter
  9. - 纯函数:无状态和无副作用,相同的输入永远得到相同的输出
  10. **柯里化**:将一个多参函数,转换成一个依次调用的单参函数。 柯里化函数会接收一些参数,然后不会立即求值,而是继续返回一个新函数,将传入的参数通过闭包的形式保存,等到被真正求值的时候,再进行求值。
  11. 偏函数:则是固定一个函数的一个或多个参数,也就是将一个 n 元函数转换成一个 n - x 元函数。<br />**compose**: 函数组合的目的是将多个函数组合成一个函数`const compose = (f, g) => x => f(g(x))`
  12. ```javascript
  13. function curry(fn, ...args) {
  14. return args.length < fn.length // fn.length表示形参的数量
  15. ? (...others) => {
  16. return curry(fn, ...args, ...others);
  17. }
  18. : fn(...args)
  19. }
  20. function compose(...fns) {
  21. return fns.reduceRight((a, b) => {
  22. return (...args) => {
  23. return a(b(...args))
  24. }
  25. })
  26. }