Stránka 1 z 1

Seřazení časů od nejrychlejšího

Napsal: 29 kvě 2016 20:11
od kimi999
Zdravím,

vymýšlím program, kdy bych rád zadal do jednoho pole o x prvcích (není předem dáno, kolik bude prvků) zadám časy ve vteřinách a následně do druhého pole zapíšu umístění.

cas(0) = 120
cas(1) = 121
cas(2) = 118
cas(3) = 115
cas(4) = 123

a teď by program měl nějak zjistit nejrychlejší čas a příslušný index zapsat jako první, pak druhý nejvyšší atd. jediné řešení co mně napadlo bylo takové, kdy byl předem známý počet prvků a to mi nepomůže

poradi(0) = 3
poradi(1) = 2
poradi(2) = 0
poradi(3) = 1
poradi(4) = 4

Vím jak zjistit největší, ale vůbec mi nedochází jak bych mohl zjistit další pořadí.
Záměrně nepíšu žádný programovací jazyk, protože nepotřebuji jako radu celý kód, ale bude mi stačit jakým stylem k tomuto řešení lze dojít :-)
Díky za každý tip :-)

Re: Seřazení časů od nejrychlejšího

Napsal: 29 kvě 2016 20:39
od izzy1995
Pozri si prosím sortovacie algoritmy. Každý má nejaké výhody alebo nevýhody. Záleží od toho, čo chceš sortovať a aký objem dát.
https://cs.wikipedia.org/wiki/Kategorie:%C5%98adic%C3%AD_algoritmy
https://www.youtube.com/watch?v=ZZuD6iUe3Pc

Re: Seřazení časů od nejrychlejšího

Napsal: 29 kvě 2016 20:44
od faraon
Seřazení: https://cs.wikipedia.org/wiki/%C5%98azen%C3%AD

Neznámá libovolná velikost: https://cs.wikipedia.org/wiki/Line%C3%A1rn%C3%AD_seznam

Každý nově zadaný záznam se dá zatřídit ihned během jeho vkládání do seznamu, stačí ti obyčejný jednosměrný. Výpis je triviální. A dá se to udělat v jakémkoliv jazyce, který umožňuje dynamickou alokaci paměti.

Re: Seřazení časů od nejrychlejšího

Napsal: 10 čer 2016 12:00
od kimi999
Asi jsem to špatně napsal, nejde mi o seřazení v poli, čísla chci ponechat na stejných místech, ale chtěl bych, aby program zjistil že např. cas(3) = 115 je nejvyšší, tak zapíše do poradi(3) = 0 atd., kdy nevím počet prvků předem.

Re: Seřazení časů od nejrychlejšího

Napsal: 10 čer 2016 12:45
od Martab
Tak stačí vyhledat nejvyšší čas a do druhého pole (alokované dynamicky) se zapíše na danou pozici pozice v seznamu původním.

Odesláno z mého Huawei P8 Lite pomocí Tapatalk

Re: Seřazení časů od nejrychlejšího

Napsal: 10 čer 2016 13:09
od Herda
stačí na to skriptík
input= Array.new(5) {100 + rand(30) }
input.each_with_index.sort_by{|val,index| val}.map{|val,index|index}

Re: Seřazení časů od nejrychlejšího

Napsal: 10 čer 2016 17:01
od faraon
Martab píše:Tak stačí vyhledat nejvyšší čas a do druhého pole (alokované dynamicky) se zapíše na danou pozici pozice v seznamu původním.

Přesně tak, přicházející data si jednoduše uložíš do spojového seznamu, který můžeš podle potřeby při načítání neustále nafukovat (dokud ti nedojde volná paměť - hlídat!!!), a přitom současně spočítat kolik položek ten seznam má. Když je všechno načteno, tak si alokuješ příslušně velké pole pro pořadí, a potom ten seznam prohledáváš tak dlouho, dokud neznáš všechna pořadí.

Jednodušší by bylo, kdybys sice předem nevěděl kolik položek budeš potřebovat, ale měl jsi jistotu že jejich počet nepřekročí nějaké číslo. Potom bys mohl mít jenom dvě statická pole, a při načítání spočítat jak velkou část pole jsi použil. Jedna proměnná navíc, a kus nevyužité paměti.

Může ale ještě nastat případ že se ti vstupní data do paměti nevejdou, nebo můžou být neomezeně velká. To bys potom měl docela problém, a muselo by se na to jít trochu jinak...

Re: Seřazení časů od nejrychlejšího

Napsal: 28 čer 2016 14:59
od kuxik009
kimi999 píše:jediné řešení co mně napadlo bylo takové, kdy byl předem známý počet prvků a to mi nepomůže

Pokud se nemýlím, tak další možnost (a pro Tebe asi nejlepší) je pouze v Tvém kódu nahradit onen známý počet prvků za počet prvků, který si zpočítáš z pole :D Jsem si celkem jistý, že v každém jazyku je funkce vracející počet prvků ze zadaného pole.