Portál AbcLinuxu, 12. května 2025 02:15

Dotaz: Setřídění pole

19.1.2020 21:19 Dooyer
Setřídění pole
Přečteno: 598×
Odpovědět | Admin

vysvětlí mi někdo jak to celé funguje? trošku se v tom ztrácím

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

19.1.2020 21:38 Vtipnéř | skóre: 39 | blog: Vtipnéřův blog | Brno
Rozbalit Rozbalit vše Re: Setřídění pole
Odpovědět | | Sbalit | Link | Blokovat | Admin
Chtělo by to upřesnit, v čem se ztrácíš. Není Ti jasné, o co jde, nebo nechápeš některý konkrétní algoritmus?

Jirka
Opening Windows is better than washing them. Clearing Windows (e.g. erasing or deleting) is even much better.
19.1.2020 22:06 Dooyer
Rozbalit Rozbalit vše Re: Setřídění pole
celkově ten algoritmus si nedokážu představit, zkoušel sem si to graficky představit a nějak sem to nepobral a ty operace pod tím if ty taky nechápu
19.1.2020 22:07 Dooyer
Rozbalit Rozbalit vše Re: Setřídění pole
jakože chtěl bych vysvětlit postupně co tenhle seřazovací algoritmus dělá od prvního for až po ten if
19.1.2020 22:19 HAgriT
Rozbalit Rozbalit vše Re: Setřídění pole
Tak si nech pole po každé iteraci vypsat nebo nažhav debugger.
19.1.2020 22:43 Radovan
Rozbalit Rozbalit vše Re: Setřídění pole
Funguje to úplně debilně, tím snad nejhorším možným způsobem, protože v tom nejideálnějším případě počítač dělá zbytečnou práci jenom polovinu času. V reálu mnohem víc...

Proměnná i: pokud máš pole velké 100 prvků, projde se 99krát.

Proměnná j: prochází se prvky od nejspodnějšího až pod vrchní, tedy s indexy 0 až 98, a každý se porovná s tím přímo nad ním.

If: Pokud je nižší prvek větší než ten vyšší, prohodí se mezi sebou.

A znovu a znovu se procházejí i ty už dávno seřazené, pořád dokola.

To je všechno, tady to máš ve videu: https://www.youtube.com/watch?v=JffeC8lGb6I
Fluttershy, yay! avatar 19.1.2020 22:17 Fluttershy, yay! | skóre: 93 | blog:
Rozbalit Rozbalit vše Re: Setřídění pole
Odpovědět | | Sbalit | Link | Blokovat | Admin
Odkaz na snímek obrazovky s kódem, uložený na externím webu pro sdílení obrázků. Stallmanova noho… 🤦

Každopádně, ten algoritmus je neefektivní varianta bublinkového třídění (bubble sort). Vizualizací si nepochybně dokážeš najít bezpočet, včetně tanečního ztvárnění.
🇵🇸Touch grass🇺🇦 ✊ ani boha, ani pána
19.1.2020 22:32 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Setřídění pole
Pro pole se třemi prvky je bubblesort nejefektivnějším algoritmem.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Fluttershy, yay! avatar 19.1.2020 22:44 Fluttershy, yay! | skóre: 93 | blog:
Rozbalit Rozbalit vše Re: Setřídění pole
Non sequitur.

Všimni si, že odkazovaná implementace vždycky provede iterací – nekontroluje, zda skutečně došlo k nějakým prohozením prvků.
🇵🇸Touch grass🇺🇦 ✊ ani boha, ani pána
Gréta avatar 20.1.2020 00:58 Gréta | skóre: 37 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
Rozbalit Rozbalit vše Re: Setřídění pole

sem si mu tady minule stěžovala že má zdrojáček blbě formátovanej tak to asi dooyer vyřešil posvým :D ;D

prosimtě dooyere tady si mužeš přepnout takovej ten editor komentů do html a zdrojáček tam napišeš takhle mezi tyhlety dva pre

<pre class="brush: c">
zdrojáček
</pre>

já to taky hnedka nemohla najít i když je to napsaný hnedka pod tim okýnkem kam se piše text :O :O :D :D

19.1.2020 22:50 Vtipnéř | skóre: 39 | blog: Vtipnéřův blog | Brno
Rozbalit Rozbalit vše Re: Setřídění pole
Odpovědět | | Sbalit | Link | Blokovat | Admin
Sorry, napoprvé jsem přehlédl ten odkaz na obrázek s algoritmem.

Jak už bylo uvedeno, jedná se o tzv. buble sort. Postupně se porovnávají prvky vedle sebe a když jsou ve špatném pořadí, tak se prohodí. Tak se při prvním průchodu dostane největší prvek na konec pole - probublá nahoru, odtud název. Při druhém průchodu se druhý největší prvek dostane na předposlední místo v poli a tak to jde dál.

Algoritmus je uveden neefektivně, jelikož při druhém průchodu se nemusí jít až na konec pole, stačí skončit o jeden prvek dřív, při druhém průchodu o dva prvky dřív atd.

Navíc údaj v poznámce za hlavičkou funkce je matoucí, pole je tam označeno jen "u" místo "uk" a vypadá to, že by mělo mít jen 10 prvků.

Jirka
Opening Windows is better than washing them. Clearing Windows (e.g. erasing or deleting) is even much better.
19.1.2020 23:53 Dooyer
Rozbalit Rozbalit vše Re: Setřídění pole
a pro to zefektivnění to jen před cyklus for (s porovnáváním sousedů) dám např for (l=1; l<9;l++) tímpádem ten v tom cyklu for(s porovnvanim sousedu) bude změněno pocet-l.. a potom se ten pocet porovnávacích sousedů bude snizovat a bude to efektivnejsi ne? nebudou se porovnavat serazene cisla
Gréta avatar 20.1.2020 00:49 Gréta | skóre: 37 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
Rozbalit Rozbalit vše Re: Setřídění pole

jestli ti jako rozumim tak jo ;D

takhle nějak by to mělo vypadat si myslim ale za výsledek neručim protože už sem skoro spací

 

...
for(i=0;i<pocet;i++)
{
    //nejvíc největší prvek políčka dofrčí vždycky uplně nakonec pole
    //určitě už ho jako nebudem postrkovat jinam protože větší tam neni
    //no a protože už nebudeme šahat nakonec mužeme snížit o počet průběhů 'i' páč tolik jsme už
    //umístili nejvíc největších prvků jakoby za každej ten průběh ;D
    //jo o jedničku zmenšujem protože tam máme j+1 a udělalo by to out of range vyjímku

    for(j=0;j<pocet-i-1;j++)
    {
    
        if(uk[j]>uk[j+1])
        {
            
            //prohodíme [j] s [j+1]
            pom=uk[j];
            uk[j]=uk[j+1];
            uk[j+1]=pom;
        
        }
    
    }

}
...
20.1.2020 13:29 Ovrscout
Rozbalit Rozbalit vše Re: Setřídění pole
Odpovědět | | Sbalit | Link | Blokovat | Admin
Celkem pěkně je (nejen) buble sort vizualizován a posán zde: https://www.algoritmy.net/article/3/Bubble-sort
22.1.2020 12:50 Dooyer
Rozbalit Rozbalit vše Re: Setřídění pole
a ještě mě zajímá uk[j+1]=pom .. proč tam musí být tenhle řádek a proč by to nejelo bez něj?
Řešení 1× (Dooyer (tazatel))
Gréta avatar 22.1.2020 13:07 Gréta | skóre: 37 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
Rozbalit Rozbalit vše Re: Setřídění pole

myslíš v tom prohazování??

pom=uk[j];
uk[j]=uk[j+1];
uk[j+1]=pom;

nóóóó tyhlety tři řádky sloužej k prohození dvou prvků pole. na prvním řádku si do dočasný pomocný proměný schováme hodnotu prvku na pozici j. děláme to proto že na druhým řádku tu pozici j přepišeme hodnotou prvku j+1 a původní obsah na pozici j by byl uplně ztracenej :O :O ;D

no a na posledním řádku teda tu původní hodnotu prvku j schovanou teďko už jenom v tý pomocný proměný zapišeme na pozici j+1. takže co bylo nazačátku na pozici j je teďko na j+1 no a co bylo nazačátku na j+1 je na j ;D

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.