首先,恭喜您找到并使用 SplFixedArrays!我认为它们是普通 PHP 中一个未被充分利用的功能......
正如您可能已经意识到的那样,它们的性能是无与伦比的(与通常的 PHP 数组相比) - 但这确实需要一些权衡,包括缺乏对它们进行排序的 PHP 函数(这是一种耻辱)!
实现您自己的冒泡排序是一个相对简单且有效的解决方案。只需迭代,查看每对连续的元素,将最高的放在右侧。冲洗并重复直到数组排序:
<?php
$arr = new SplFixedArray(10);
$arr[0] = 2345;
$arr[1] = 314;
$arr[2] = 3666;
$arr[3] = 93;
$arr[4] = 7542;
$arr[5] = 4253;
$arr[6] = 2343;
$arr[7] = 32;
$arr[8] = 6324;
$arr[9] = 1;
$moved = 0;
while ($moved < sizeof($arr) - 1) {
$i = 0;
while ($i < sizeof($arr) - 1 - $moved) {
if ($arr[$i] > $arr[$i + 1]) {
$tmp = $arr[$i + 1];
$arr[$i + 1] = $arr[$i];
$arr[$i] = $tmp;
}
$i++;
var_dump ($arr);
}
$moved++;
}
Run Code Online (Sandbox Code Playgroud)
它不快,效率也不高。为此,您可能会考虑快速排序 - 网上有文档化的示例,包括wikibooks.org上的示例(需要修改才能与 SplFixedArrays 一起使用)。
说真的,除了回答你的问题之外,我真的觉得强迫自己问为什么像 SplFixedArray 这样的东西存在并强迫自己理解“快速调用array_sort()”背后发生的事情(以及为什么它很快需要很长时间才能运行)程序员和程序员的区别。我赞同你的提问!
| 归档时间: |
|
| 查看次数: |
960 次 |
| 最近记录: |