Algorithm 排序算法的名称?
我试图找出一个排序算法(或者仅仅是一个方法?)的名称,它通过3个值进行排序 我们从3个值开始,数组应该根据对象的id、位置以及设置到该位置的日期进行排序,允许日期和位置相同。请原谅我糟糕的解释。我会举一个例子 我们有6个位置,如果不进行任何编辑,数组将如下所示Algorithm 排序算法的名称?,algorithm,sorting,Algorithm,Sorting,我试图找出一个排序算法(或者仅仅是一个方法?)的名称,它通过3个值进行排序 我们从3个值开始,数组应该根据对象的id、位置以及设置到该位置的日期进行排序,允许日期和位置相同。请原谅我糟糕的解释。我会举一个例子 我们有6个位置,如果不进行任何编辑,数组将如下所示 {id:1,pos:0,date:0} {id:2,pos:0,date:0} {id:3,pos:0,date:0} {id:4,pos:0,date:0} {id:5,pos:0,date:0} {id:6,pos:0,date:0}
{id:1,pos:0,date:0}
{id:2,pos:0,date:0}
{id:3,pos:0,date:0}
{id:4,pos:0,date:0}
{id:5,pos:0,date:0}
{id:6,pos:0,date:0}
如果我将第一个对象移动到第二个位置,它将返回此顺序
{id:2,pos:0,date:0}
{id:1,pos:2,date:1}
{id:3,pos:0,date:0}
{id:4,pos:0,date:0}
{id:5,pos:0,date:0}
{id:6,pos:0,date:0}
但是如果我们在哪里移动第三个物体到第二个位置
{id:2,pos:0,date:0}
{id:3,pos:2,date:2}
{id:1,pos:2,date:1}
{id:4,pos:0,date:0}
{id:5,pos:0,date:0}
{id:6,pos:0,date:0}
注:pos不会更改,但会根据更高的日期值在相同编号的位置之前订购
现在,我们将第四个对象移动到位置1
{id:4,pos:1,date:3}
{id:2,pos:0,date:0}
{id:3,pos:2,date:2}
{id:1,pos:2,date:1}
{id:5,pos:0,date:0}
{id:6,pos:0,date:0}
注意:id 2占据数字2的位置,即使pos和date仍然为0,因为id小于其后面的id
我们现在将id 6移动到位置2
{id:4,pos:1,date:3}
{id:6,pos:2,date:4}
{id:2,pos:0,date:0}
{id:3,pos:2,date:2}
{id:1,pos:2,date:1}
{id:5,pos:0,date:0}
id 5到位置4
{id:4,pos:1,date:3}
{id:6,pos:2,date:4}
{id:2,pos:0,date:0}
{id:5,pos:4,date:5}
{id:3,pos:2,date:2}
{id:1,pos:2,date:1}
最后id 2到位置6
{id:4,pos:1,date:3}
{id:6,pos:2,date:4}
{id:5,pos:4,date:5}
{id:3,pos:2,date:2}
{id:1,pos:2,date:1}
{id:2,pos:6,date:6}
我希望我的例子有助于给出任何回答,我知道这不是一个高质量的问题,如果回答了,我会尽我所能编辑这个问题。只是一个猜测,因为您的最终顺序看起来不是“排序的”,字典排序?请参见。对象的移动类似于插入排序,即移动整个子数组以插入对象。日期表示执行操作的顺序,位置表示对象移动到的位置,但没有用于对象移动位置的字段。有足够的信息来重现序列,从最初的顺序开始,然后根据日期进行移动。我不知道这个序列是否可以与给定的信息相反
使用id字段,可以使用任何排序算法恢复原始排序。不幸的是,我找不到“排序”的名称(?),但是,我能够实现我使用下面代码的目的 (如果我完全遗漏了什么,请告诉我,我会更改它并将其归功于您) PHP实现
$data = '[
{"id":"1","pos":"1","date":"0"},
{"id":"2","pos":"5","date":"0"},
{"id":"3","pos":"4","date":"0"},
{"id":"4","pos":"3","date":"0"},
{"id":"5","pos":"4","date":"1"},
{"id":"6","pos":"2","date":"0"}
]'; //simulated data set
$arr = json_decode($data,true);
$final_arr = $arr;
$tmp_array = array();
$actions = array();
for ($i=0; $i < sizeof($arr); $i++) {
$num = $i+1;
$tmp = array();
for ($o=0; $o < sizeof($arr); $o++) {
if($arr[$o]['pos'] == 0)continue;
if($arr[$o]['pos'] == $num){
array_push($tmp,$arr[$o]);
}
}
if($tmp){
usort($tmp,function($a,$b){
return $a['date'] > $b['date'];
});
for ($o=0; $o < sizeof($tmp); $o++) {
array_push($tmp_array,$tmp[$o]);
}
}
}
for ($i=0; $i < sizeof($tmp_array); $i++) {
for ($o=0; $o < sizeof($arr); $o++) {
if($final_arr[$o]['id'] == $tmp_array[$i]['id']){
array_splice($final_arr, $tmp_array[$i]['pos']-1, 0, array_splice($final_arr, $o, 1));
}
}
}
$output = json_encode($final_arr,JSON_PRETTY_PRINT);
printf($output);
我不知道你到底在这里干什么,你只是把东西搬到不同的地方?我们不知道决定哪些项目移动以及它们移动到哪里的过程是什么,所以这几乎不可能像这样回答。我实际上只是通过一个界面将项目移动到其他位置,但我正试图了解,鉴于我必须处理的数据,我如何才能实现这一输出。我目前正在对我的数据集进行测试,将很快更新。谢谢你的加入!遗憾的是,我无法按照字典顺序复制我想要的效果,非常感谢您的回答,谢谢!
[
{
"id": "1",
"pos": "1",
"date": "0"
},
{
"id": "6",
"pos": "2",
"date": "0"
},
{
"id": "4",
"pos": "3",
"date": "0"
},
{
"id": "5",
"pos": "4",
"date": "1"
},
{
"id": "2",
"pos": "5",
"date": "0"
},
{
"id": "3",
"pos": "4",
"date": "0"
}
]