gpt4 book ai didi

Javascript 好的部分 : sorting not stable?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:45:04 24 4
gpt4 key购买 nike

在《Javascript: The Good Parts》一书中,作者在第81页提到了“稳定”的概念。Link to Google book

但是我发现书上给出的例子与排序是否稳定无关。 Wiki

我在这里遗漏了什么吗?

所以书中的例子如下:

var s = [
{first: 'Joe', last: 'Besser'},
{first: 'Moe', last: 'Howard'},
{first: 'Joe', last: 'DeRita'},
{first: 'Shemp', last: 'Howard'},
{first: 'Larry', last: 'Fine'},
{first: 'Curly', last: 'Howard'}
];

The sort method is not stable, so:s.sort(by('first')).sort(by('last'));is not guaranteed to produce the correct sequence.

但是这个例子其实并不能证明排序是否稳定。如果先排序然后按最后排序,则将覆盖按第一部分排序。结果如下:

[ { first: 'Joe', last: 'Besser' },
{ first: 'Joe', last: 'DeRita' },
{ first: 'Larry', last: 'Fine' },
{ first: 'Curly', last: 'Howard' },
{ first: 'Moe', last: 'Howard' },
{ first: 'Shemp', last: 'Howard' } ]

我知道 JS 排序不能保证稳定。 Herehere .但我认为这本书没有以正确的方式处理这个话题。我的问题是我不知道我的理解是否正确。如果我错了,我想知道为什么。

最佳答案

假设您按名字排序,然后按姓氏重新排序。你得到这样的东西:

[
{ first: 'Joe', last: 'Besser'},
{ first: 'Joe', last: 'DeRita'},
{ first: 'Larry', last: 'Fine'},
?
?
?
]

前三个元素保证是那三个,那剩下的是什么呢?他们都有相同的姓氏 'Howard',因此不清楚他们的顺序。

对于不稳定的排序,这些项目可以按任何顺序排列。你可以得到这个:

[
{ first: 'Joe', last: 'Besser'},
{ first: 'Joe', last: 'DeRita'},
{ first: 'Larry', last: 'Fine'},
{ first: 'Shemp', last: 'Howard'}
{ first: 'Moe', last: 'Howard'},
{ first: 'Curly', last: 'Howard'},
]

其中最后三个元素的顺序与名字相反。然而,通过稳定排序,这些元素将保证按照它们被前一个排序放置的顺序出现。按照名字排序,Curly 排在 Moe 前面,Moe 排在 Shemp 前面,所以您一定会得到这个:

[
{ first: 'Joe', last: 'Besser'},
{ first: 'Joe', last: 'DeRita'},
{ first: 'Larry', last: 'Fine'},
{ first: 'Curly', last: 'Howard'},
{ first: 'Moe', last: 'Howard'},
{ first: 'Shemp', last: 'Howard'}
]

关于Javascript 好的部分 : sorting not stable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30135262/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com