JavaScript用数字排序

mjm*_*che 3 javascript sorting algorithm comparison

以下程序(取自教程)按从低到高的顺序打印数组中的数字.在这种情况下,结果将是 2,4,5,13,31

我的问题涉及函数compareNumbers的参数"a"和"b".当函数被调用时,函数numArray.sort(compareNumbers)的参数a和b将是多少.它只是沿阵列移动吗?例如,从a=13b=2?开始?之后,比较a = 2和b = 31,函数再次运行吗?或者它接下来会比较a=31b=4

有人可以解释一下这部分是如何工作的,以及它如何设法从最低到最高对它们进行排序?我不知道该函数如何设法对数组中的数字进行必要的计算.

function compareNumbers(a,b) {
  return a - b;
}

var numArray = [13,2,31,4,5];
alert(numArray.sort(compareNumbers));
Run Code Online (Sandbox Code Playgroud)

tem*_*def 8

传入的特定对取决于所使用的排序算法.由于算法试图对范围进行排序,因此需要能够比较值对来确定它们的排序.每当发生这种情况时,它会调用您的函数来进行比较.

因此,如果没有关于排序算法如何工作的内部知识,您无法预测哪些对将被比较.算法的选择将直接确定哪些元素被比较以及以什么顺序进行比较.

有趣的是,您实际上可以使用比较函数来可视化排序的工作方式或对排序算法进行逆向工程!网站sortviz.org有很多可视化排序算法,可以通过将自定义比较器传递到跟踪每个元素位置的排序函数来生成.如果你看一下,你可以看到每个算法移动其元素的方式有多么不同.

更有趣的是,你可以使用比较功能作为攻击性武器!一些排序算法,即快速排序,具有特定的输入,可能导致它们比平时运行得慢得多.在"Quickort的杀手对手"中,作者详细介绍了如何使用自定义比较器来为排序算法构建错误的输入.

希望这可以帮助!