Shellsort i PHP

Koden nedenfor viser hvordan man kan skrive en enkel(?) sorteringsfunksjon i PHP. Vi har jo sort(); Men det er uansett gøy å få det til :) Jada jada..'finne opp hjulet på nytt..'.

<?
function shellsort( $a, $N )
{
//$a er tabellen og $N er antall plasser i tabellen.
//OBS OBS: husk at en tabell begynner på plass 0

   $i; $j; $v;
   for ( $h = 1; $h <= $N/9; $h = ( 3 * $h + 1 ) );
   for ( ; $h > 0; $h /= 3 )
   {
      for ( $i = $h + 1; $i <= $N; $i += 1 )
      {
         $v = $a[$i];
         $j = $i;
         while ( ( $j > $h ) && ( $a[$j - $h] > $v ) )
         {
            $a[$j] = $a[$j-$h];
            $j -= $h;
         }
         $a[$j] = $v;
      }
   }
   return $a;
}

$tabell = Array(1,4,5,6,2,7,2);

$sortert = shellsort($tabell,6);

print_r($sortert);

?>

Hastighetsmessig pleier man å si at denne ligger som nummer 4. Den kan også være ganske treg ved 'uheldige valgte tall'.

Skrevet av Sindre Mathisen 2002