Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]funkcja do sortowania bez użycia sort
Forum PHP.pl > Forum > Przedszkole
robin5hood
napisałem taką funkcję do sortowania bez użycia sort ale nie działa kto mi podpowie smile.gif
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)
?>
nevt
funkcja sort() nic nie sortuje ...
JoShiMa
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
po prostu mam takie ćwiczenie smile.gif
a jak tu zastosowac while?
JoShiMa
Podedytowałam swój post i dodałam link. Tam masz wszystko opisane wraz ze schematem algorytmu. Powodzenia.
robin5hood
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 sad.gif
co musze zmienic tam?
JoShiMa
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
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
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
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 wstydnis.gif
JoShiMa
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 questionmark.gifquestionmark.gif oraz $range=count($a)-1 questionmark.gifquestionmark.gif;

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
Nie powinno być w obu pętlach for($j=0 i for($i=0 questionmark.gif questionmark.gif oraz $range=count($a)-1 questionmark.gif questionmark.gif ;

a czy to zmieni coś w progrramie?
batman
@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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.