尝试遵循Javascript中的数值数组排序步骤

时间:2018-11-02 17:12:16

标签: javascript arrays sorting

我正在学习在Javascript中对数字数组进行数组排序,我已经看过mdn页面并进行了搜索,这是我想要了解的那种类型:

 var numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b) {
  return a - b;
});
console.log(numbers);

// [1, 2, 3, 4, 5]

我了解发生了什么,我似乎找不到关于javascript数组排序的简单易懂的分步文章,该文章显示了如何比较和移动“ a”和“ b”,例如到达数组末尾时,排序是否会重复进行,直到对所有项目进行排序?我想我以一种易于理解的方式对实现感到好奇。

要添加的内容是,我尝试使用控制台记录输出,但是对于执行方式仍然有些困惑,因此希望从认识的人那里找到更具体的答案。

4 个答案:

答案 0 :(得分:1)

sort功能的实现与浏览器有关

例如WebKit实现:https://gist.github.com/964673

答案 1 :(得分:1)

the specification未指定使用的特定排序算法; JavaScript引擎可以自由使用它喜欢的任何sorting algorithm,无论是bubble sortquicksort还是其他东西。但是,是的,排序算法通常需要做的不仅仅是遍历数据和对每个元素进行一次比较。还有更多。

答案 2 :(得分:1)

Array.sort方法是内置的。它利用了一种机器语言快速排序功能,它将比您在代码中可以做的任何事情都要快。 Computerphile has a good video on quicksort.

但是,任何排序算法都必须知道首先出现两个元素中的哪个,这就是函数的作用。整个算法中此时比较的两个数组元素都将被传递,并返回:

一个负数:第一个参数应排在第一位。 正数:第二个参数应优先排序。 零:它们相等。

希望这可以澄清!

答案 3 :(得分:1)

如果要查看正在发生的情况,请在比较功能的内部 内放置一些日志记录:

var numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b) {
  console.log("["+numbers.join()+"], comparing element #"+numbers.indexOf(a)+" ("+a+") and #"+numbers.indexOf(b)+" ("+b+"): "+(a-b));
  return a - b;
});
console.log(numbers.join());

然后,您可以耐心地跟踪元素的移动方式,并识别实际的排序算法。