[PHP]funkcja do sortowania bez użycia sort |
[PHP]funkcja do sortowania bez użycia sort |
3.06.2008, 16:14:48
Post
#1
|
|
Grupa: Zarejestrowani Postów: 189 Pomógł: 0 Dołączył: 16.05.2008 Ostrzeżenie: (10%) |
napisałem taką funkcję do sortowania bez użycia sort ale nie działa kto mi podpowie
Kod <?php
function sort($a=array()) { $range=count($a); $pom=$a[0]; for($i=1;$i<$range;$i++) { if($a[$i+1]<$a[$i]){$pom=$a[$i]; $a[$i]=$a[$i+1]; $a[$i+1]=$pom} } return $pom; } $tab=array(34,1,20,0,-1); sort($tab) ?> Ten post edytował robin5hood 3.06.2008, 16:15:38 |
|
|
3.06.2008, 16:20:21
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 1 595 Pomógł: 282 Dołączył: 24.09.2007 Skąd: Reda, Pomorskie. Ostrzeżenie: (0%) |
funkcja sort() nic nie sortuje ...
-------------------- - Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... - |
|
|
3.06.2008, 16:22:10
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 374 Pomógł: 149 Dołączył: 1.03.2006 Ostrzeżenie: (0%) |
Z tego co widzę zrobiłeś coś w stylu sortowania bąbelkowego, ale pętla for załatwia Ci tylko jedną iterację. Musisz to wsadzić do jeszcze jednej pętli (while), która będzie się wykonywać póki nie przestaniesz używać warunku if($a[$i+1]<$a[$i]). Poczytaj sobie o tym sortowaniu http://www.i-lo.tarnow.pl/edu/inf/alg/algsort/pages/004.php.
A w ogóle to czemu piszesz to na piechotę? Ten post edytował JoShiMa 3.06.2008, 16:23:18 -------------------- |
|
|
3.06.2008, 16:24:07
Post
#4
|
|
Grupa: Zarejestrowani Postów: 189 Pomógł: 0 Dołączył: 16.05.2008 Ostrzeżenie: (10%) |
po prostu mam takie ćwiczenie
a jak tu zastosowac while? |
|
|
3.06.2008, 16:26:36
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 374 Pomógł: 149 Dołączył: 1.03.2006 Ostrzeżenie: (0%) |
Podedytowałam swój post i dodałam link. Tam masz wszystko opisane wraz ze schematem algorytmu. Powodzenia.
-------------------- |
|
|
3.06.2008, 16:29:39
Post
#6
|
|
Grupa: Zarejestrowani Postów: 189 Pomógł: 0 Dołączył: 16.05.2008 Ostrzeżenie: (10%) |
Miałem właśnie taką funkcję w DELPHI i próbowałem ją przerobic ale doszedłem tylko do tego co w pierwszym poście
co musze zmienic tam? Ten post edytował robin5hood 3.06.2008, 16:53:57 |
|
|
4.06.2008, 07:47:46
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 374 Pomógł: 149 Dołączył: 1.03.2006 Ostrzeżenie: (0%) |
Jesli nie umiesz przeczytać algorytmu przedstawionego graficznie i jeśli nie rozumiesz, że trzeba dodać pętlę to jak Ci to wyjaśnić? Zrobić zadanie domowe za Ciebie? Przyłóż się.
-------------------- |
|
|
5.06.2008, 05:40:14
Post
#8
|
|
Grupa: Zarejestrowani Postów: 189 Pomógł: 0 Dołączył: 16.05.2008 Ostrzeżenie: (10%) |
dodałem tą pętle czy o to chodziło?
Kod <?php
function display($a=array()) { $range=count($a); for($i=0;$i<$range;$i++) {echo $a[$i]." ";} } function sort($a=array()) { $range=count($a); $pom=$a[0]; for($j=1;$j<$range;$j++) { for($i=1;$i<$range;$i++) { if($a[$i+1]<$a[$i]){$pom=$a[$i]; $a[$i]=$a[$i+1]; $a[$i+1]=$pom;} } } $tab=array (35,56,88,99,11,134); $tab1=sort($tab);display($tab1); ?> |
|
|
5.06.2008, 09:29:33
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 374 Pomógł: 149 Dołączył: 1.03.2006 Ostrzeżenie: (0%) |
A działa? Bo wygląda na oko (ostrzegam, że krótko patrzyłam), że powinno zadziałać. Gdyby jakoś mądrze prze myśleć warunek to dałoby się zamiast for wykorzystać pętlę while, która w sytuacji bardziej uporządkowanej tablicy wykonywałaby się na pewno krócej, ale nie mam teraz pomysłu na ten warunek. Tak improwizując można by było sprawdzać, ćzy w wewnętrznej pętli choć raz nastąpiło przestawienie pary. Jeśli nie zdarzyło się to to wiadomo, że już można przerwać pętlę zewnętrzną.
-------------------- |
|
|
5.06.2008, 10:08:29
Post
#10
|
|
Grupa: Zarejestrowani Postów: 189 Pomógł: 0 Dołączył: 16.05.2008 Ostrzeżenie: (10%) |
no nadal niestety nie działa mimo że dodałem tę pętle for,a pętli while bardzo nie znam bo na razie stosowłem zawsze for
|
|
|
5.06.2008, 10:13:58
Post
#11
|
|
Grupa: Zarejestrowani Postów: 1 374 Pomógł: 149 Dołączył: 1.03.2006 Ostrzeżenie: (0%) |
no nadal niestety nie działa mimo że dodałem tę pętle A jaki jest wynik? Nie powinno być w obu pętlach for($j=0 i for($i=0 oraz $range=count($a)-1 ; for,a pętli while bardzo nie znam bo na razie stosowłem zawsze for Może czas się nauczyć? Ten post edytował JoShiMa 5.06.2008, 10:15:43 -------------------- |
|
|
9.06.2008, 09:13:23
Post
#12
|
|
Grupa: Zarejestrowani Postów: 189 Pomógł: 0 Dołączył: 16.05.2008 Ostrzeżenie: (10%) |
Nie powinno być w obu pętlach for($j=0 i for($i=0 oraz $range=count($a)-1 ;
a czy to zmieni coś w progrramie? |
|
|
9.06.2008, 09:37:58
Post
#13
|
|
Grupa: Moderatorzy Postów: 2 921 Pomógł: 269 Dołączył: 11.08.2005 Skąd: 127.0.0.1 |
@robin5hood
Dostałeś gotowe rozwiązanie w postaci nazwy algorytmu oraz linka do tego, jak on działa. Sądzę, że potrafisz znaleźć w wyszukiwarce na forum lub na google podpowiedź. Zamykam. @JoShiMa dostaje plusa. -------------------- I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features. |
|
|
Wersja Lo-Fi | Aktualny czas: 27.04.2024 - 05:08 |