robin5hood
3.06.2008, 16:14:48
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)
?>
funkcja sort() nic nie sortuje ...
JoShiMa
3.06.2008, 16:22:10
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ę?
robin5hood
3.06.2008, 16:24:07
po prostu mam takie ćwiczenie

a jak tu zastosowac while?
JoShiMa
3.06.2008, 16:26:36
Podedytowałam swój post i dodałam link. Tam masz wszystko opisane wraz ze schematem algorytmu. Powodzenia.
robin5hood
3.06.2008, 16:29:39
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?
JoShiMa
4.06.2008, 07:47:46
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ę.
robin5hood
5.06.2008, 05:40:14
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);
?>
JoShiMa
5.06.2008, 09:29:33
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ą.
robin5hood
5.06.2008, 10:08:29
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
JoShiMa
5.06.2008, 10:13:58
Cytat(robin5hood @ 5.06.2008, 09:08:29 )

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


;
Cytat(robin5hood @ 5.06.2008, 09:08:29 )

for,a pętli while bardzo nie znam bo na razie stosowłem zawsze for
Może czas się nauczyć?
robin5hood
9.06.2008, 09:13:23
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?
batman
9.06.2008, 09:37:58
@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.
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.