| Autor | Zpráva | ||
|---|---|---|---|
| Muff Profil * |
#1 · Zasláno: 17. 2. 2010, 09:57:47
Zdravím,
s PHP začínám a řeším problém. Mám po explode pole s měnícími se různými čísly, někdy pouze kladná, jindy jen záporná, nebo oba případy, příklad: $cisla = array(150, -20, 30.48, -6, 1.38, -9, 34, -48.56); A teď bych potřeboval k proměnných $nejmensi a $nejvetsi přiradit nejmenší číslo (může být záporné i kladné) a největší číslo (může být záporné i kladné) z toho pole. Napadlo mě tyto čísla sečíst a vydělit počtem čísel, tím bych dostal aritmetický průměr a věděl, že existuje menší a větší číslo od tohoto průměru. Pak bych například cyklem toto pole prošel znova a porovnáváním hledal do mínusu a do plusu. Matnou představu mám, ovšem celé mi to připadne jako velice krkolomné řešení. Neexistuje jednodušší postup? |
||
| Budulinek Profil |
#2 · Zasláno: 17. 2. 2010, 10:03:44
co třeba funkce min() a max()? Tady najdeš více
|
||
| Radek9 Profil |
#3 · Zasláno: 17. 2. 2010, 10:04:00 · Upravil/a: Radek9
Muff:
$cisla = array(150, -20, 30.48, -6, 1.38, -9, 34, -48.56); sort($cisla); $nejmensi = $cisla[0]; rsort($cisla); $nejvetsi = $cisla[0]; Edit: Aha, Budulinek našel lepší řešení. |
||
| Muff Profil * |
#4 · Zasláno: 17. 2. 2010, 10:19:49
Budulinek, Radek9: Až je mi normálně trapně jak jsem to chtěl řešit. :-) Díky.
|
||
| AM_ Profil |
#5 · Zasláno: 17. 2. 2010, 11:11:31
Radek9:
Tfujtajbl, přes sort? A ještě k tomu ho voláš dvakrát, protože neumíš přečíst POSLEDNÍ prvek pole? pardon, ale tohle je prasárna. Když už, tak: sort($cisla); $nejmensi = $cisla[0]; $nejvetsi = $cisla[count($cisla)-1]; Má to ještě jednu nevýhodu, je to zbytečně pomalé. Třídění zabere minimálně N*logN času, ale tenhle problém se dá zmáknout v čase N:
$nejmensi = $nejvetsi = $cisla[0];
foreach ($cisla as $cislo){
if ($cislo < $nejmensi) $nejmensi = $cislo;
if ($cislo > $nejvetsi) $nejvetsi = $cislo;
}
Až budeš prohledávat třeba 100 tisíc čísel, budeš za tohle zrychlení vděčný. |
||
|
Časová prodleva: 16 let
|
|||
0