= $lo && $list[$c]->compare($temp, $order)) { $list[$c + 1] = $list[$c]; --$c; } $list[$c + 1] = $temp; } } for ($size = self::BLOCKS; $size < $n; $size *= 2) { for ($lo = 0; $lo < $n; $lo += 2 * $size) { // merge sort $mi = $lo + $size - 1; $hi = \min($lo + 2 * $size - 1, $n - 1); $n1 = $mi - $lo + 1; $n2 = $hi - $mi; $loList = []; $hiList = []; for ($i = 0; $i < $n1; ++$i) { $loList[$i] = $list[$lo + $i]; } for ($i = 0; $i < $n2; ++$i) { $hiList[$i] = $list[$mi + 1 + $i]; } $i = 0; $j = 0; $k = $lo; while ($i < $n1 && $j < $n2) { if (!$loList[$i]->compare($hiList[$j], $order)) { $list[$k] = $loList[$i]; ++$i; } else { $list[$k] = $hiList[$j]; ++$j; } ++$k; } while ($i < $n1) { $list[$k] = $loList[$i]; ++$i; ++$k; } while ($j < $n2) { $list[$k] = $hiList[$j]; ++$j; ++$k; } } } return $list; } }