Autor Zpráva
RastyAmateur
Profil
Dobrý den,

asi většina z vás má zkušenosti s funkcí usort(). Když se podíváte do manuálu (viz. odkaz), je tam Example #1. Asi nejprimitivnější a nejčastěji používaný příklad. Ať dělám co dělám, vůbec nechápu, jak z ta celá funkce může vrátit seřazené pole. Dokázal by mi to někdo nějak lehce a srozumitelně vysvětlit?

Děkuji :-)
Martin2
Profil *
Usort je funkce sort s uživatelsky definovatelnou porovnávací funkcí. Tedy standardní Quicksort s připojenou funkcí, která rozhoduje, za jestli je A větší než B na základě vnitřní (tebou definované) logiky.
nightfish
Profil
RastyAmateur:
jak z ta celá funkce může vrátit seřazené pole
Seřazení pole dosáhneš tak, že budeš nějakým konkrétním způsobem procházet pole po dvojicích hodnot a pro každou dvojici rozhodneš, jestli je první prvek dvojice menší, rovný nebo větší než druhý prvek dvojice. Pokud je menší nebo rovný, tak nemusíš dělat nic, pokud je větší, tak oba prvky prohodíš. A pak pokračuješ s další dvojicí. (To, jakým způsobem budeš dvojice k porovnání volit, závisí na zvoleném algoritmu řazení.)

Druhým parametrem funkce usort() je funkce, která rozhoduje, jaký je zájemný vztah prvního a druhého prvku dvojice (přičemž tato funkce dostane první prvek dvojice jako první parametr a druhý prvek dvojice jako druhý parametr). Pokud jsou si oba prvky rovny, vrátí funkce 0. Pokud je první prvek menší než druhý, vrátí -1, pokud je první prvek větší než druhý, vrátí 1.
Keeehi
Profil
RastyAmateur:
Jestli jde o funkci cmp, tak ta sama o sobě seřazené pole nevrací. Jediným jejím úkolem je říct který z prvků $a nebo $b je větší nebo zda se rovnají. Tuto pomocnou funkci cmp volá opakovaně funkce usort. Vždy jí předá dva prvky z pole o kterých potřebuje vědět, který z nich je menší a podle odpovědi se zařídí. To, které zrovna dva prvky té funkci předá záleží na řadícím algoritmu, který usort implementuje. Těch je mnoho a liší se složitostí a výkonem. Výkon se měří právě tím, kolikrát se musí pomocná funkce cmp zavolat. Čím méně, tím je lepší.
Ať už funkce usort implementuje jakýkoliv z algoritmů, tak všechny mají společné to, že jediná informace se kterou pracují je zda je menší $a nebo ne.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: