javascript - Javascript 排序中真正发生的事情

标签 javascript function sorting

我已经看到这种排序功能工作正常:

var arr = [1,5,3,7,8,6,4,3,2,3,3,4,5,56,7,8,8];


console.log(arr.sort(
    function(a,b) {
        return a - b;
    }
    ));

但我并不真正了解这个小功能的机制。比较时ab ,它真正比较的是数组的哪些数字?如果说,它选择了前两个数字15 ,函数将返回 -4 .这对排序顺序意味着什么?或者它只是负 bool 值?即使是这样,这种情况又是如何发生的呢?

最佳答案

基本上,排序通过一次比较两个元素来工作。比较不仅仅是一个 bool 值——您有三个选项:小于、等于和大于。在 JavaScript 中,这三个值分别用 n < 0、0 和 n > 0 表示。

换句话说,负数意味着a < b ; 0表示 a = b和积极的手段a > b .

回答更广泛的问题:有一些相对较快的算法可以通过比较列表的元素来对列表进行排序。最受欢迎的是Quicksort ;但是,快速排序并不稳定,因此某些引擎(肯定是 Firefox 的)使用不同的算法。一个简单的稳定排序是Mergesort .

排序算法通常是介绍 CS 类(class)中分析的第一个算法,因为它们简单但仍然有趣且不平凡,足以说明如何分析一般算法。出于这个原因,您应该阅读它们,并且仅仅是因为它们非常酷。

稍微随意一点:

你也可以想象为这类事情使用特殊类型(如枚举)。比较函数可以返回 LT , GTEQ例如,视情况而定。但是,在像 JavaScript 这样的动态语言中,仅使用数字就容易得多。在更痴迷于类型的语言中(如 Haskell :)),使用特殊的 order 类型更有意义。

关于javascript - Javascript 排序中真正发生的事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8588921/

相关文章:

c - 函数返回的动态数组的长度

javascript - 重复调用同一函数时无法使 jQuery 回调正常工作

python - 将列表转换为字符串

javascript - 如何在鼠标悬停事件中捕捉鼠标左键?

javascript - Redux + TypeScript 和 mapDispatchToProps

javascript - Javascript:点击更改按钮时文字颜色

java - 基于对象属性的ArrayList排序

javascript - 使文字“不可读”

Python:打印不完整

java - 如何在保持自然顺序的同时将 Java long 转换为字符串