<?php function zmiana(&$a, &$b) { $tmp = $a; $a = $b; $b = $tmp; } function Quicksort (&$tab, $left, $right) { if($left < $right) { $m = $left; for($i = $left+1; $i <= $right; $i++) if($tab[$i] < $tab[$left]) { zmiana($tab[++$m],$tab[$i]); } zmiana($tab[$left],$tab[$m]); Quicksort($tab,$left,$m-1); Quicksort($tab,$m+1,$right); } } Quicksort($tablica,$tablica[0],$tablica[$prawa]); ?>
I za żadne skarby nie chce działać...błąd który zwraca to: Notice: Undefined offset: 40 in /srv/http/test.php on line 16, czyli linijka: if($tab[$i] < $tab[$left]), oraz 41-elementową tablice... ma ktoś pomysł?
Temat do zamknięcia, zamiast nr to ja przesyłałem wartość elementu tablicy.
Poprawy kod:
<?php function zmiana(&$a, &$b) { $tmp = $a; $a = $b; $b = $tmp; } function Quicksort (&$tab, $left, $right) { if($left < $right) { $m = $left; for($i = $left+1; $i <= $right; $i++) // var_dump($left, $i, $tab);exit; if($tab[(int)$i] < $tab[(int)$left]) { zmiana($tab[++$m],$tab[$i]); } zmiana($tab[$left],$tab[$m]); Quicksort($tab,$left,$m-1); Quicksort($tab,$m+1,$right); } } Quicksort($tablica,0,$prawa); ?>
Więcej o funkcjach sortujących, możecie przeczytać na moim blogu, link w stopce,