function insertQuickSort(&$array, &$comparator, $head_offset, $tail_offset, $limit = 200) { $head = (int) $head_offset; $tail = (int) $tail_offset; if ($tail - $head <= $limit) { Arrays::insertSort($array, $comparator, $head, $tail); } $middle = intval(($head + $tail) / 2); $pivot = $array[$middle]; do { while ($comparator->compare($array[$head], $pivot) < 0 && $head < $tail_offset) { $head++; } while ($comparator->compare($pivot, $array[$tail]) < 0 && $tail > $head_offset) { $tail--; } if ($head <= $tail) { Arrays::swap($array, $head++, $tail--); } } while ($head <= $tail); if ($head_offset < $tail) { Arrays::quickSort($array, $comparator, $head_offset, $tail); } if ($head < $tail_offset) { Arrays::quickSort($array, $comparator, $head, $tail_offset); } }