javascript - js中的排序算法有两个条件
问题描述
我有一个问题 - 我正在完成一项任务。任务是在 js 中使用 sort() 将数组分成两部分 - 首先我必须显示数组中所有未除以 3 的数字降序,然后所有数字除以 3 升序。我使用 random() 生成 100 个随机数的数组(如果是示例 - 20)。然后我使用代码来根据他们的可分性设置数字。
例子
12, 75, 80, 47, 66, 60, 2, 65, 65, 68, 97, 32, 5, 14, 15, 11, 65, 53, 76, 97
table.sort(
function(a,b){
if((a % 3) == 0)
{
return 1;
}
else if(a == 0)
{
return 0;
}
else
{
return -1;
}
}
);
这很好用。
80, 47, 2, 65, 65, 68, 97, 32, 5, 14, 11, 65, 53, 76, 97, 15, 60, 66, 75, 12
现在我有相同的数组,其中第一个数字不除以 3,反之亦然。当我尝试将值设置为升序和降序时,我遇到了一些问题。
table.sort(
function(a,b){
if((a % 3) == 0)
{
return a - b;
}
else if((a % 3) != 0)
{
return b - a;
}
else
{
return a;
}
}
);
97, 97, 80, 76, 68, 65, 65, 65, 53, 47, 32, 15, 60, 66, 75, 14, 12, 11, 5, 2
首先 - 它不适用于 11 以下的数字,只需将其全部降序打印,而不管它们的可分性如何。
其次 - 它适用于从 12 到 100 左右的数字 - 它做了它应该做的事情,但几乎总是(3 次中有 2 次)在数组的背面有一些未排序的垃圾(或排序不好)。 (检查 exmalpe)
第三 - 如果值设置在 1000 和 10000 之间 - 它工作得很好(我做了很少的测试,也许它失败了,但我没有注意到)
所以这里有一个问题 - 有没有办法以及如何修复我的代码,以便它将相同数组中的数字排序如下:
- 不除以 3,降序,首先在数组上
- 除以 3,升序,当所有以上都排序时
感谢您的任何提示
@编辑:
片段,如建议的那样:
var max = 100;
table = [];
for(var i = 0 ; i < 20 ; i++)
{
var x = Math.floor(Math.random() * max) + 1;
table[i] = x;
}
console.log(table.join(", "));
table.sort(
function(a,b){
if((a % 3) === 0)
{
return 1;
}
else if(a === 0)
{
return 0;
}
else
{
return -1;
}
}
);
console.log(table.join(", "));
table.sort(
function(a,b){
if((a % 3) == 0)
{
return a - b;
}
else if((a % 3) !== 0)
{
return b - a;
}
else
{
return a;
}
}
);
console.log(table.join(", "));
解决方案
let notDividedBy3 = table.filter(x => x % 3 !== 0).sort((a, b) => b - a);
let dividedBy3 = table.filter(x => x % 3 === 0).sort();
let result = [...notDividedBy3, ...dividedBy3];
console.log(result.join(", "));
推荐阅读
- c# - MonoLauncher 实例在停止我的 Visual Studio 调试后暂停
- go - 我怎么知道我所有的 goroutine 确实在等待使用 golang 的同步包的条件
- python - Pyclbr readmodule 在另一个目录的脚本中运行时失败
- html - CSS Less手表编译器-如何传递参数并根据参数生成CSS的多个副本?
- arduino - Arduino打印我没有告诉它打印的东西
- rest - 如何使用 Apache Camel 将 SOAP XML 转换为 REST JSON 请求并以相反的顺序返回响应
- python - 如何为每个带有条件的 id 分配二进制值
- mysql - mySQL全文搜索两个字母单词
- r - 如何使用 rdplot 绘制带有置信区间的回归不连续图?
- java - 我可以将注释传递给扩展它的子类吗?