<?php
function korjaaKeko(&$a, $i, $t){
$alkio = $a[$i];
$j = $i * 2 + 1;
// Siirretään alkiota kohti lehtisolmuja
while ($j <= $t) {
if ($j < $t && ($a[$j] < $a[$j + 1])) $j = $j + 1;
if ($alkio >= $a[$j]) break; // lopetetaan silmukka
if ($alkio < $a[$j]) {
$a[$i] = $a[$j];
$i = $j;
$j = 2 * $i + 1;
} else {
$j = $t + 1;
}
}
$a[$i] = $alkio;
}
function kekolajittelu(&$a) {
$init = (int)floor((count($a) - 1) / 2);
// rakennetaan keko
for($i = $init; $i >= 0; $i--) {
$count = count($a) - 1;
korjaaKeko($a, $i, $count);
}
//swapataan
for ($i = (count($a) - 1); $i >= 1; $i--) {
$tmp_var = $a[0];
$a[0] = $a[$i];
$a[$i] = $tmp_var;
korjaaKeko($a, 0, $i - 1);
}
}
$array = [];
for ($i = 0; $i < 10; $i++) array_push($array, rand(1, 50));
kekolajittelu($array);
echo "Lajiteltuna:\n" . implode(', ', $array) . "\n";