Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
function quickSort(&$a, $l = 0, $r = 0) {
if($r == 0) $r = count($a)-1;
$i = $l;
$j = $r;
$x = $a[($l + $r) / 2];
do {
while ($a[$i] < $x) $i++;
while ($a[$j] > $x) $j--;
if ($i <= $j) {
if ($a[$i] > $a[$j])
list($a[$i], $a[$j]) = array($a[$j], $a[$i]);
$i++;
$j--;
}
} while ($i <= $j);
$function = __FUNCTION__;
if ($i < $r) $function($a, $i, $r);
if ($j > $l) $function($a, $l, $j);
}
function mergeSort(&$a, $first = 0, $last = null) {
if (is_null($last)) $last = count($a) - 1;
$function = __FUNCTION__;
if ($first < $last) {
$function($a, $first, floor(($first + $last) / 2));
$function($a, floor(($first + $last) / 2) + 1, $last);
$tmp = array();
$middle = floor(($first + $last) / 2);
$start = $first;
$final = $middle + 1;
for ($i = $first; $i <= $last; $i++) {
if (($start <= $middle) && (($final > $last) || ($a[$start] < $a[$final]))) {
$tmp[$i] = $a[$start];
$start++;
} else {
$tmp[$i] = $a[$final];
$final++;
}
}
for ($i = $first; $i <= $last; $i++) {
$a[$i] = $tmp[$i];
}
}
}
function heapSort(&$a) {
$n = count($a);
heapMake($a);
while ($n > 0) {
list($a[0], $a[$n - 1]) = array($a[$n - 1], $a[0]);
$n--;
heapify($a, 0, $n);
}
}
function heapMake(&$a) {
$n = count($a);
for ($i = ($n - 1); $i >= 0; $i--) {
heapify($a, $i, $n);
}
}
function heapify(&$a, $pos, $n) {
while (2 * $pos + 1 < $n) {
$t = 2 * $pos +1;
if (2 * $pos + 2 < $n && $a[2 * $pos + 2] >= $a[$t]) {
$t = 2 * $pos + 2;
}
if ($a[$pos] < $a[$t]) {
list($a[$pos], $a[$t]) = array($a[$t], $a[$pos]);
$pos = $t;
}
else break;
}
}
$tmp = array();
Бенчмарк 14 алгоритмов сортировки на массивах с разной размерностью и содержанием