Ejemplo n.º 1
0
 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);
     }
 }