Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Algorytm Quicksort
Forum PHP.pl > Forum > PHP
carbolymer
Naskrobałem taki kod:
  1. <?php
  2. /////////////////////////////////////////////
  3. function quickSortAsc(&$tab, $lewo, $prawo, $key)
  4. {
  5. if ($lewo<$prawo)
  6. {
  7. $k=$lewo;
  8. $p=$tab[$lewo][$key];
  9. for ($i=$lewo+1;$i<$prawo;++$i)
  10. if ($p>$tab[$i][$key])
  11. {
  12.  ++$k;
  13.  $temp=$tab[$i];
  14.  $tab[$i]=$tab[$k];
  15.  $tab[$k]=$temp;
  16. }
  17. $temp=$tab[$lewo];
  18. $tab[$lewo]=$tab[$k];
  19. $tab[$k]=$temp;
  20. quickSortAsc($tab, $lewo, $k-1, $key);
  21. quickSortAsc($tab, $k+1, $prawo, $key);
  22. }
  23. }
  24.  
  25. /////////////////////////////////////////////
  26. function quickSortDesc(&$tab, $lewo, $prawo, $key)
  27. {
  28. if ($lewo<$prawo)
  29. {
  30. $k=$lewo;
  31. $p=$tab[$lewo][$key];
  32. for ($i=$lewo+1;$i<=$prawo;++$i)
  33. if ($p<=$tab[$i][$key])
  34. {
  35.  ++$k;
  36.  $temp=$tab[$i];
  37.  $tab[$i]=$tab[$k];
  38.  $tab[$k]=$temp;
  39. }
  40. $temp=$tab[$lewo];
  41. $tab[$lewo]=$tab[$k];
  42. $tab[$k]=$temp;
  43. quickSortDesc($tab, $lewo, $k-1, $key);
  44. quickSortDesc($tab, $k+1, $prawo, $key);
  45. }
  46. }
  47. ?>

Obydwie funkcje sortują tablicę $tab według klucza $key.
quickSortDesc() - sortuje malejąco
quickSortAsc() - sortuje rosnąco
I jak sortuje tablicę rosnąco wg. klucza exp to nie wiadomo czemu potwór z exp=655 ląduje pomiędzy potworami z exp=25000 i exp=30000 I teraz mam pytanie:
Gdzie jest błąd? Prosiłbym o poprawienie ;D Thx ;p;p
EuReKa
Błędem było pisanie tego, zamiast użycia funkcji sort().
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.