JS的排序方法,Array.prototype.sort(fun)是咋执行的
sort接受一个函数为参数,这个函数作为比较的依据,别人已经说了,我说说sort方法的实现好了。javascript的sort方法是使用了优化过的快速排序算法来实现的。以V8引擎为例,具体的优化手段有:小数组(小于10项)采用插入排序提升效率一般数组采用三数取中获得基准元素超过2000项的大数组采用更复杂的规则获得基准元素(这条和上面一条降低算法进入最差情况的几率,特别是对于已排序的数组意义很大)分区时会分成小于基准、等于基准、大于基准三个分区(解决数组元素相同时快速排序算法效率极差的问题)对于小于基准和大于基准这两个分区,选择项数少的进行递归,项数多的进行循环,有效降低递归深度前段时间刚好写了一篇关于sort方法快速排序算法的文章,有兴趣可以参考一下:深入了解javascript的sort方法
■网友
你需要补习最基本的算法知识。请阅读 排序算法然后实现最简单的几种:选择排序、插入排序和冒泡排序。然后你就明白了。
■网友
大家不要太不耐心. 也不要不仔细理解题目就乱给题主指方向. 题主你放心, 这是个简单的问题, 不需要复习数据结构的知识就可以理解. 下面这个排序函数展示了任何基于比较的排序算法 (comparison-based sorting algorithm) 都有的一段代码: 从大到小排序(一列东西, 一个比较函数) { ... 比较结果 = 比较函数(东西1, 东西2) 讨论 比较结果 { 大于零 说明 东西1 比 东西2 大 小于零 说明 东西1 比 东西2 小 等于零 说明 东西1 和 东西2 相等 } ...}也就是说你在用这个排序算法的时候, 除了需要传入一列东西以外, 还需要传入一个比较函数. 为什么呢? 注意这个排序函数在利用比较函数干什么: 函数执行到这里, 它需要判断两个东西的大小. 整数/浮点数的大小比较倒是好说, 但是任意类型的两个对象怎么比较大小, 就需要程序员自定义了. 我们来考察一个比较函数的输入输出: 输入是同一类型的两个对象; 输出是三个状态 {大, 小, 相等}, 通常用 {大于零的值, 小于零的值, 零} 来分别代表. 也就是说, 比较函数是留给其他程序员自己定义任意类型的对象间大小关系的. 一个算法接收一个比较函数, 就能把具体两个对象怎么比较这件事从算法中分离 (抽象) 出来, 丢给别人做, 自己只关系高层的实现. 排序算法并不关心它手上的元素的序关系到底是怎么定义的, 它只需要知道比较结果. 一般来说, 如果你那一列东西是普通的数 (比如整数), 那么一般来说, 你所使用的程序语言的标准库早就帮你实现了几个用于数的默认比较函数, 不用你手传. 所以如果你一直只在代码中排一些整数或者浮点数, 而且总是直接用默认升降序来排, 那就没可能遇到要提供比较函数的情况. 你的代码定义了下面这个比较函数:数值比较(数1, 数2) { 返回 数1 - 数2 }这样, 你在调用排序函数的时候从大到小排序(, 数值比较)返回值为 . 如果定义数值逆比较(数1, 数2) { 返回 数2 - 数1 }再执行从大到小排序(, 数值逆比较)其返回值就是 . 因为此时排序函数认为 1 比 2 "大". 题主问: 为什么这么多数你只需要写两个?答案: 你提供的比较函数会在排序函数中被不停地调用. 每当排序算法遇到需要知道两个数哪个大哪个小, 就会调用你的比较函数来看结果大小 (即执行答案一开始我展示出来的那段代码).
■网友
以选择排序为例:const sort = (arr, fn)=\u0026gt; { for (let i = 0; i \u0026lt; arr.length; i++) { for (let j = i + 1; j \u0026lt; arr.length; j++) { if (fn(arr, arr) \u0026gt; 0) { const temp = arr; arr = arr; arr = temp; } } }};const a = ;sort(a, (a, b)=\u0026gt;a - b);console.log(a);//
推荐阅读
- 长寿花怎么养护?掌握两大方法,乖乖花开“爆盆”,花香四溢!
- 有啥方法,网站,项目可以自己练习计算广告学
- 直播会成为品牌传播的另一个途径么有哪些可行的方法感觉有戏又没头绪好捉急。
- |邳州市岔河镇探索创新工作方法以“三个凝聚”助力统战工作提质增效
- 小孩|手术矫正要20万,有什么可以不动手术的方法?小孩有点地包天
- 孩子|小孩发烧的处理方法有物理降温与药物退烧!但很多新手父母不会
- 中兴努比亚 Z5 的边框到底有多窄
- 捷径|学会这套方法,考试高分不难高考历史复习有“捷径”
- 高血糖|71岁老人血糖从13.1降回正常,学会他的降糖方法, 你或也可以做到
- 乙肝|有乙肝不要怕,54岁大姐乙肝17年,肝没硬化,她的养肝方法可借鉴
