【发布时间】:2016-05-04 07:01:57
【问题描述】:
如果我这样做了
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'k'].sort( function(a,b){ return a.length - b.length } )
输出
[“a”、“b”、“c”、“d”、“e”、“f”、“g”、“h”、“i”、“k”]
但是当我这样做时(最后添加了一个元素'l')
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'k', 'l'].sort( function(a,b){ return a.length - b.length } )
输出
[“f”、“a”、“c”、“d”、“e”、“b”、“g”、“h”、“i”、“k”、“l”]
发生这种情况是否有任何具体原因,或者这只是一个怪癖?
PS:与this question相关。我在 chrome 上对其进行了测试,从昨天开始就一直困扰着我 :)
【问题讨论】:
-
@Alnitak 抱歉,我已经解释了数组之间的区别
-
我猜?它在执行快速排序传递时将中间元素移到前面,然后使用插入排序退出/排序其余元素。
-
奇怪的是,如果我使用
1..9比较器对1..9进行排序,我看不到这种行为 -
无论如何,排序后相等元素的顺序是不确定的。
-
@Alnitak 尝试 0..11。 IIRC,至少一个库排序实现使用,事实上的标准是插入最多 10 个元素的子数组和上面的快速排序。
标签: javascript arrays sorting