gpt4 book ai didi

javascript - 为什么我的 Javascript 程序中的 Array.sort() 方法不稳定?

转载 作者:行者123 更新时间:2023-11-28 18:29:16 24 4
gpt4 key购买 nike

这是我的 jsFiddle:

//Change this variable to change the number of players sorted
var numberOfPlayers = 15;

var teams = [];
var alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

for(var a=0; a<numberOfPlayers; a++){
updateStandings();
teams.push(new Team(alphabet.charAt(a)));
}

console.log("Teams:");
for(var x=0; x<teams.length; x++){
console.log(teams[x].name);
}

//Functions and such
function updateStandings(){
teams.sort(function(a, b) {
if(a.score == b.score){
if(a.tiebreak == b.tiebreak){
return teams.indexOf(a)-teams.indexOf(b);
}else{
return b.tiebreak-a.tiebreak;
}
}else{
return b.score-a.score;
}
});
}

function Team(name){
this.name = name;
this.score = 0;
this.tiebreak = 0;
}

我认为问题是 javascript 排序不稳定,并更改了我的比较函数,但它仍然不起作用。

最佳答案

JS 中稳定排序的通用方法如下:

function stable_sort(array, sortfunc) {
function _sortfunc(a, b) { return sortfunc(array[a], array[b]) || a - b; }

return array.map((e, i) => i) . sort(_sortfunc) . map(i => array[i]);
}

这实际上是对索引列表进行排序。然后它将排序后的索引列表映射回原始数组。重写排序函数以比较数组中这些索引处的值,如果它们相等,则返回到索引本身的比较。

这种方法避免了代码中的问题,即它正在对处于排序中间的数组进行 indexOf 查找。

This question可能会提供丰富的信息。

关于javascript - 为什么我的 Javascript 程序中的 Array.sort() 方法不稳定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38444837/

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