我想知道哪种方法最适合编写排序算法,哪种就地排序(不需要额外的空间,也无需对数组进行排序即可复制而无需复制它)。例如插入排序,快速排序等。
到目前为止,我在github上遇到的大多数示例如下:
//...
public function sort(array $array): array
{
//...
return $array;
}
这不是用php记录下来的最有效方法吗?我的意思是,它完全失去了所有“就地”好处。每次将数组传递给函数时,它都会复制该数组,然后再次返回复制的数组。
使用会更好吗
//...
public function sort(array &$array): void
{
//...
}
方法?这样我们就没有任何不必要的复制,并且可以就地进行真正的排序。如果我们检查memory_get_peak_usage()
的值,则表明后者(带有参考号&)几乎比第一种方法低两倍。
我知道参考文献在很多情况下并不是真正的“最佳实践”,并且对此不以为然,但是在这里看来它们确实有其应有的地位,不是吗?