Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按行和列排序的js数组二进制插入_Javascript_Tile - Fatal编程技术网

Javascript 按行和列排序的js数组二进制插入

Javascript 按行和列排序的js数组二进制插入,javascript,tile,Javascript,Tile,我有一个按[row,col]排序的初始瓷砖数组,如下所示 [0,1][0,2][0,3] [1,1][1,2][1,3] 我需要像这样按行和列顺序插入二进制元素 二进制输入([0,0]) 二进制输入([1,0]) 预期的结果将是一个按如下顺序排列的数组 [0,0][0,1][0,2][0,3] [1,0][1,1][1,2][1,3] 基本上,我需要能够在每个方向(上、右、左、下)添加行和列,但总是按照下面的示例进行排序 我可以使用此函数将行和列转换为一个值 函数协调顺序(行、列、numC

我有一个按[row,col]排序的初始瓷砖数组,如下所示

[0,1][0,2][0,3]

[1,1][1,2][1,3]

我需要像这样按行和列顺序插入二进制元素

  • 二进制输入([0,0])

  • 二进制输入([1,0])

预期的结果将是一个按如下顺序排列的数组

[0,0][0,1][0,2][0,3]

[1,0][1,1][1,2][1,3]

基本上,我需要能够在每个方向(上、右、左、下)添加行和列,但总是按照下面的示例进行排序

我可以使用此函数将行和列转换为一个值

函数协调顺序(行、列、numCols){
返回col+initCols*行
}
var initCols=5;
变量顺序=坐标顺序(1,4,initCols);

警报(顺序)
提示:任何排序过程的实现,包括二进制插入,都需要提供顺序关系“试着雇个程序员吧,这听起来像是个家庭作业。到目前为止你试过什么?显示一些代码,指出您被阻止的位置,我们将乐意帮助您。我们不能只为您编写代码。无论如何,这是一个糟糕的学习策略,我的意思是这样的,但使用两个因素,是的,我是一个beginner@mvw我有一个存储平铺值(如行和列)的对象数组coord@AngeloBosio您的更新将问题的性质完全改变为性能问题。您需要提供有关数据大小和所需操作的更多信息,以获得良好的性能建议。您的函数可以简化为
var cmp=function{var f=0+(a[0]==b[0]);返回a[f]-b[f];}但这没有你的快。你的答案更适合于一般用途,我的简化版更适合于代码最小化。谢谢你的回答,但我已经尝试过排序功能,我的目的是降低速度。我认为这将是一个更快的解决方案,即二进制插入,但我不知道如何使用2因子(行,列)@AngeloBosio a)计算2。我建议您应该使用
sort()
仅用于测试。对于执行比较的流程图中的所有菱形,您需要
cmp()
。b) 我不希望结果快得多,
sort()
很可能会使用一些O(logn)排序方法。@mvw每次我添加I tile时,我都需要使用排序函数O(Nlog(n))对整个数组进行排序,这比二进制插入要贵得多,但这只是我个人的意见,如果有人能解释得更多,我将appreciate@AngeloBosio不你可以分批做。在我的示例中,只需推送两个新条目,然后在最后只进行一次排序。插入还将迫使您将数组扩展到某个位置以插入新元素。我不确定扩展/复制是否比单一排序快得多。
var a = [ [0,1], [0,2], [0,3], [1,1], [1,2], [1,3] ];

var cmp = function(a, b) { 
  if (a[0] == b[0]) {
    return a[1] - b[1]; 
  } 
  return a[0] - b[0]; 
};
a.push([0,0]);
[[0, 1], [0, 2], [0, 3], [1, 1], [1, 2], [1, 3], [0, 0]]
a.sort(cmp);
[[0, 0], [0, 1], [0, 2], [0, 3], [1, 1], [1, 2], [1, 3]]
a.push([1,0]);
a.sort(cmp);
[[0, 0], [0, 1], [0, 2], [0, 3], [1, 0], [1, 1], [1, 2], [1, 3]]