簡體   English   中英

如何對SplFixedArray排序?

[英]How to sort an SplFixedArray?

有沒有一種方法可以對SplFixedArray類實例中的整數或字符串進行排序? 是轉換為PHP的array ,進行排序,然后再轉換回為唯一選擇嗎?

首先,恭喜您找到並使用了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++;
}

它不快,效率也不高。 對於你可能會考慮快速排序-有記錄在線的例子包括本在wikibooks.org (需要與SplFixedArrays的工作修改)。

認真地說,除了讓您的問題得到回答之外,我真的感到自己要強迫自己問為什么存在SplFixedArray之類的事物,並強迫自己了解“快速調用array_sort() ”后發生了什么(以及為什么快速花很長時間才能完成)。運行)使程序員與程序員之間有所不同。 我歡迎您的提問!

這是我使用splFixedArrays進行冒泡排序的改編。 在PHP 7中,這個簡單的程序的速度是常規bubbleort的兩倍

function bubbleSort(SplFixedArray $a) 
{
   $len = $a->getSize() - 1;
   $sorted = false;

   while (!$sorted) {
    $sorted = true;
    for ($i = 0; $i < $len; $i++)
    {
        $current = $a->offsetGet($i);
        $next = $a->offsetGet($i + 1);

        if ( $next < $current ) {
            $a->offsetSet($i, $next);
            $a->offsetSet($i + 1, $current);
            $sorted = false;
        }
    }
  }

  return $a
}

$starttime = microtime(true);
$array = SplFixedArray::fromArray([3,4,1,3,5,1,92,2,4124,424,52,12]);
$array = bubbleSort($array);

print_r($array->toArray());
echo (microtime(true) - $starttime) * 1000, PHP_EOL;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM