php - 从多个预先排序的数组创建排序的array

  显示原文与译文双语对照的内容
0 0

我想从一系列预先排序的数组中创建一个排序的array 。

给定的{A1,.. ., An} 是预先排序的数组,我想创建 At,这是 {A1,.. ., An}的组合,并按照相同的方式排序。

例如:


Given :
A1 = [2, 4, 9, 16]
A2 = [-3, 4, 98, 116]
...
An = [1, 7, 17, 76, 512]

I would like :
At = [-3, 1, 2, 4, 4, 9, 16, 17, 76, 98, 116, 512] 

什么是计算这个 array 最有效的方法?

谢谢

时间: 原作者:

0 0

这很简单。我们有一个。- 预先排序的列表和相同数量的索引。 现在我们需要从这个列表中形成合并列表。 为此,我们需要从所有这些列表中找到最小的( 或者最大的依赖于初始排序次序) 元素。 很明显这是 A1 [I1] [I2]的一个。 [IN] 元素,所以我们只浏览所有这些元素并选择最小。 假设它是A2中的元素。 我们将它放入新的大列表中,增加。 现在我们有相同的情况和开始,重复所有这些步骤,如果所有的列表耗尽。

例如:


A1 = [1, 2, 6]
A2 = [2, 4, 5]

A = []
I1 = 0
I2 = 0
-------------
A = [1]
I1 = 1
I2 = 0
-------------
A = [1, 2]
I1 = 2
I2 = 0
-------------
A = [1, 2, 2]
I1 = 2
I2 = 1
...

0 0

$A1 = [2, 4, 9, 16];
$A2 = [-3, 4, 98, 116];
$An = [1, 7, 17, 76, 512];


//create arrays of ith elements
$return = call_user_func_array('array_map', [null, $A1, $A2, $An]);
//sort arrays
array_walk($return, 'sort');
//create new arrays
$return = call_user_func_array('array_merge', $return);
//remove null values lefted after first operation
$return = array_filter($return, 'is_scalar');
var_dump($return);

原作者:
0 0

我已经实现了一个功能来完成我想要的。

你觉得性能如何? 你有什么建议要改进?

排序函数:


function sortPreSortedArrays($arrays, $comparisonFunction, $order = 'asc')
{
 $sortedArray = array();

/* Sort */

 while(sizeof($arrays)!== 0)
 {
/* Find the greatest value */

 $max = true;
 $keyMax = -1;

 foreach($arrays as $key => $array)
 {
 if($max === true || $comparisonFunction(end($array), $max))
 {
 $max = end($array);
 $keyMax = $key;
 }
 }

/* Take the greatest value */

 array_push($sortedArray, array_pop($arrays[$keyMax]));
 if(sizeof($arrays[$keyMax]) === 0) unset($arrays[$keyMax]);
 }

/* Return */

 if($order === 'asc')
 return array_reverse($sortedArray);
 else
 return $sortedArray;

比较功能:


function compareLogArrayDate($log1, $log2)
{
 $t1 = $log1['date'];
 $t2 = $log2['date'];

 return ($t1> $t2)? true : false;
}

为了改进 performancse,我尝试使用最高效的array 函数( array_popO(1) 代替 array_shitO(n) ),以提高性能。 不过我仍然在使用 unset 。 :|

原作者:
...