262143) { $m = 262143; } $l = \array_fill(0, $n, 0); $anmin = $list[0]; $anmax = $anmin; $nmax = 0; $nmove = 0; $lk = 0; $kmin = null; $kmax = null; // todo: replace >>> with Numeric::uRightShift for ($i = 0; NumericUtils::uRightShift(($i += 2) - $n, 31);) { if (NumericUtils::uRightShift(($kmax = $list[$i - 1])->getValue() - ($kmin = $list[$i])->getValue(), 31)) { if (NumericUtils::uRightShift($kmax->getValue() - $anmin->getValue(), 31)) { $anmin = $list[$i - 1]; } if (NumericUtils::uRightShift($anmax->getValue() - $kmin->getValue(), 31)) { $anmax = $list[$i]; $nmax = $i; } } else { if (NumericUtils::uRightShift($kmin->getValue() - $anmin->getValue(), 31)) { $anmin = $list[$i]; } if (NumericUtils::uRightShift($anmax->getValue() - $kmin->getValue(), 31)) { $anmax = $list[$i - 1]; $nmax = $i - 1; } } } if (NumericUtils::uRightShift(--$i - $n, 31)) { if (NumericUtils::uRightShift(($k = $list[$i])->getValue() - $anmin->getValue(), 31)) { $anmin = $list[$i]; } elseif (NumericUtils::uRightShift($anmax->getValue() - $k->getValue(), 31)) { $anmax = $list[$i]; $nmax = $i; } } if ($anmin->getValue() === $anmax->getValue()) { return $list; } $c1 = (($m - 1) << 13) / ($anmax->getValue() - $anmin->getValue()); for ($i = -1; NumericUtils::uRightShift(++$i - $n, 31);) { ++$l[($c1 * ($list[$i]->getValue() - $anmin->getValue())) >> 13]; } $lk = $l[0]; for ($k = 0; NumericUtils::uRightShift(++$k - $m, 31);) { $lk = ($l[$k] += $lk); } $hold = $anmax; $list[$nmax] = $list[0]; $list[0] = $hold; $flash = null; $j = 0; $k = ($m - 1); $i = ($n - 1); while (NumericUtils::uRightShift($nmove - $i, 31)) { while ($j !== $lk) { $k = ($c1 * ($list[(++$j)]->getValue() - $anmin->getValue())) >> 13; } $flash = $a[$j]; $lk = $l[$k]; while ($j !== $lk) { } } } }