Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Funkcja]Funkcja sortująca
Forum PHP.pl > Inne > Oceny
MateuszS
Postanowiłem napisać z nudów funkcję sortującą ciągi oraz liczby (z racji że lubię wyzwania, których wcześniej nie podejmowałem), rosnąco i malejąco, alfabetycznie i (a)analfabetycznie ( tongue.gif ). Oczywiście w PHP są już funkcje sortujące ale w innych językach już nie jest tak łatwo. Mój skrypt można łatwo zaadoptować do dowolnego języka, właśnie robię dla C++.

Funkcję wywołujemy
sortuj(tablica,typ)

gdzie tablica to tablica z danymi do sortowania a typ to 1 (malejąco), 0 (rosnąco) a funkcja zwraca tablicę już posortowaną, gotową do wyświetlenia.

Oto skrypt wraz z przykładem

Powiedzmy, wersja alpha.
  1. <?php
  2.  
  3. $tablica=array(1,2,3,4,5,6,6,6,4,4);
  4.  
  5. function sortuj($tablica,$typ) {
  6. $ilosc=count($tablica);
  7. for($i=0; $i<$ilosc; $i++) {
  8. $l=0;
  9. if($typ==0) $c=0;
  10. elseif($typ==1) $c=$ilosc-1;
  11. else return false;
  12.  
  13. for($a=0; $a<$ilosc; $a++) {
  14. if($tablica[$i]>$tablica[$a]) {
  15. if($typ==0) $c++;
  16. else $c--;
  17. } else {
  18. if($tablica[$i]==$tablica[$a] && $i!=$a) {
  19. $k=true;
  20. $l++;
  21. }
  22. }
  23. }
  24.  
  25. if($k==true) {
  26. for($z=1; $z<=$l; $z++) {
  27. if($typ==0) $nowa_tablica[$c+$z]=$tablica[$i];
  28. else $nowa_tablica[$c-$z]=$tablica[$i];
  29. $k=false;
  30. }
  31. }
  32. $nowa_tablica[$c]=$tablica[$i];
  33.  
  34. }
  35.  
  36. for($s=0; $s<$ilosc; $s++) {
  37. $zwracana[$s]=$nowa_tablica[$s];
  38. }
  39. return $zwracana;
  40.  
  41. }
  42.  
  43. $zwracana=sortuj($tablica,0);
  44. foreach($zwracana as $key) {
  45. echo $key.'<br />';
  46. }
  47.  
  48.  
  49. ?>


Czekam na opinie.

PS. Nie sciagalem, nie korzystałem z obcych algorytmów czy znanych już metod sortowania (np. bąbelkowej itd.) ;P

PS 2: Jaka jest metoda sortowania którą najbardziej skrypt przypomina?
nospor
Cytat
Nic a nic nie ściągałem, all z mózgu
No tu akurat nie masz czym się chwalić. istnieje wiele bardziej optymalniejszych algorytmów. Jak już się nudziłeś to trzeba było użyć jednego z nich.

ocena końcowa: 1 w systemie ocen od 1 do 6
MateuszS
No ale pisałem że chcę spróbować sam napisać, spróbować a nie korzystać z innych, no ale... i tak nikt już nie czyta do końca postów

1 sad.gif , dobrze że jestem już przyzwyczajony do jedynek biggrin.gif
nospor
Cytat
No ale pisałem że chcę spróbować sam napisać, spróbować a nie korzystać z innych,
czytam i czytam i nigdzie tego nie widzę oprócz tego co tu zacytowałem

No i bardzo dobrze - pisz sam a konkretnie zaimplementuj wymyślony juz algorytm. Wbrew pozorom może się to okazać o wiele trudniejsze niż wymyslenie i napisanie własnego.
piotrooo89
tak jak powiedział ~nospor zaimplementuj jakiś algorytm sortujący, Twój jest taki se jeśli chodzi o szczerość. tu masz wszystko: http://pl.wikipedia.org/wiki/Kategoria:Algorytmy_sortowania

btw.
mnie osobiście kiedyś tam dawno w czasach technikum udało się zaimplementować takie sortowania: bąbelkowe, szybkie i selekcje. pracowałem nad jakimiś jeszcze ale nie pamiętam. powodzenia smile.gif
seth-kk
@MateuszScirka: funkcje sortujace to dobre miejsce na template pattern skoro juz tak ambitnie podchodzisz
skowron-line
Cytat(MateuszScirka @ 3.12.2009, 20:50:09 ) *
PS 2: Jaka jest metoda sortowania którą najbardziej skrypt przypomina?


Dla przykładu który podałeś to sort
I ciężki wybór 36 linii kodu kontra 1 linia ... hmmm. No ale najważniejsze żeby próbować.
MateuszS
Tak tak, wiem że są sorty, asorty, usorty itd. Chciałem tylko spróbować napisać coś swojego winksmiley.jpg Na co dzien uzywam tych gotowych ;]
emp
I bardzo dobrze na pewno wiele się nauczyć, zrozumiesz i obczaisz nowe horyzonty. Ja osobiście zupełnie nie rozumiem ludzi którzy nie próbują zrobić sami takich rzeczy jak sortowania, stosy, podwójne isty, frejmłorki itp tu nie chodzi o wymyślanie koła no nowo tylko o zrozumienie jego działania i poszerzenie swojej wiedzy na ten temat.

Jak już zrobisz to po swojemu to spróbuj zastosować jakiś zwykły algorytm w swojej funkcji np bombelkowy. Najważniejsze jest jednak to że próbujesz to rozwiązać po swojemu bo stosowanie gotowych rozwiązań to żadna filozofia.
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-2024 Invision Power Services, Inc.