6

SplFixedArrayクラスのインスタンスで整数または文字列の並べ替えを実行する方法はありますか? PHP の に変換しarray、並べ替えてから元に戻すことが唯一のオプションですか?

4

2 に答える 2

2

これは、splFixedArrays を使用したバブル ソートの適応です。PHP 7 では、この単純なプログラムは通常のバブルソートよりも 2 倍高速です。

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;
于 2015-12-29T08:26:41.703 に答える