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

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

kimi999
Level 4
Level 4
Příspěvky: 1103
Registrován: duben 11
Pohlaví: Muž
Stav:
Offline

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

Příspěvekod kimi999 » 29 kvě 2016 20:11

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 :-)

Reklama
izzy1995
Level 3
Level 3
Příspěvky: 569
Registrován: prosinec 12
Pohlaví: Muž
Stav:
Offline

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

Příspěvekod izzy1995 » 29 kvě 2016 20:39

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
Intel Core i7-4710HQ 3,5Ghz, Intel HM86 Chipset, 8GB DDR3 1600Mhz, SATA HDD 1TB(7200rpm) + 2TB samsung HDD,IPS LED 15,6" 1920x1080px,Intel Graphics 4600, Nvidia GeForce GTX860M 4GB GDDR5,Wi-fi 802.11 a/g/n, Bluetooth
ASUS N551JM-DM157H

Born to be FIIT (STU)

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7359
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

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

Příspěvekod faraon » 29 kvě 2016 20:44

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.
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

kimi999
Level 4
Level 4
Příspěvky: 1103
Registrován: duben 11
Pohlaví: Muž
Stav:
Offline

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

Příspěvekod kimi999 » 10 čer 2016 12:00

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.

Uživatelský avatar
Martab
Moderátor / člen HW týmu
Guru Level 14
Guru Level 14
Příspěvky: 28586
Registrován: březen 11
Pohlaví: Muž
Stav:
Offline

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

Příspěvekod Martab » 10 čer 2016 12:45

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
i5-3350P/P8B75-M LX/Kingston DDR3 8GB/GV-N960IXOC/SS-500ET/Seagate VS35.6/Transcend SSD370-128GB/Samsung BX2250 + Dell 1909W
ThinkPad X230 - i7-3520M + Kingston Savage SSD

„Neexistuje důvod, proč by kdokoli chtěl mít doma něco jako počítač"(Ken Olsen)

Neboj se použít SZ a upozornit na své téma ;)

Přehled desktopových socketů a CPU

Uživatelský avatar
Herda
Level 2.5
Level 2.5
Příspěvky: 357
Registrován: únor 16
Pohlaví: Muž
Stav:
Offline

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

Příspěvekod Herda » 10 čer 2016 13:09

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}

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7359
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

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

Příspěvekod faraon » 10 čer 2016 17:01

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...
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Uživatelský avatar
kuxik009
Level 2.5
Level 2.5
Příspěvky: 338
Registrován: únor 13
Pohlaví: Muž
Stav:
Offline
Kontakt:

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

Příspěvekod kuxik009 » 28 čer 2016 14:59

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.
Moje portfolio
Český jazyk je freeware, ale nikoliv open source!!!

Sestava:
► Zobrazit spoiler


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek

Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti