tirriainen
4/4/2018 - 1:16 PM

heapsort.php

<?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";