Hledáš dárek, který neskončí v koši? Nyní 90 % extra kreditů ZDARMA s promo kódem PREKVAPENI90. Zjisti více:
NOVINKA: Staň se datovým analytikem od 0 Kč a získej jistotu práce, lepší plat a nové kariérní možnosti. Více informací:

Diskuze – Lekce 1 - Selection sort

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Nejnovější komentáře jsou na konci poslední stránky.
Avatar
Don
Člen
Avatar
Don:25.9.2011 16:21

Trochu nechápu větu "Nyní cyklem projedeme pole od prvního do posledního prvku (rozsah cyklu je zvýrazněn barevně) a vybereme to nejmenší číslo (zde 9)." Píše se zde že vybereme nejmenší číslo ale v závorce je číslo 9 a v tabulce pracujeme s číslem 1. Myslím že v závorce mělo být napsané číslo 1.

Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Don
David Hartinger:25.9.2011 22:03

V původní verzi článku jsem třídil pomocí hledání maxima, zapomněl jsem to změnit, díky za upozornění :)

Odpovědět
New kid back on the block with a R.I.P
Avatar
martinkobelka
Tvůrce
Avatar
martinkobelka:28.7.2012 13:20

kod pro php

$pole = array(1,8,7,4,2);
for($i=0;$i<count($pole);$i++){
    for($j=$i;$j<count($pole);$j++){
        if($i == $j){
            $min = $pole[$j];
            $cislop = $j;
        }
        else{
            if($pole[$j] < $min){
                $min = $pole[$j];
                $cislop = $j;
            }
        }
    }
    $mezi = $pole[$i];
    $pole[$i] = $min;
    $pole[$cislop] = $mezi;
}

echo implode($pole, ", ");
Avatar
jahoda.l
Člen
Avatar
Odpovídá na martinkobelka
jahoda.l:16.4.2013 15:23

Osobně bych to řešil v PHP spíše nějak takto:

function selection_sort(array $sortedArray){
  $lenght = count($sortedArray);
  $temp = null;
  for($actualPossition = 0; $actualPossition < $lenght; ++$actualPossition){
      $min = null;
      for($runPossiton = $actualPossition; $runPossiton < $lenght; ++$runPossiton){
        if($sortedArray[$runPossiton] < $min || $min === null){
          $min = $sortedArray[$runPossiton];
          $temp = $runPossiton;
        }
      }
      $sortedArray[$temp] = $sortedArray[$actualPossition];
      $sortedArray[$actualPossition] = $min;
  }
  return $sortedArray;
}

Dle výkonu je v PHP dobré nepoužívat funkce jako např. "count" při cyklech, jelikož při každém průchodu cyklu se funkce znovu volá. Je tedy výhodnější jí uložit do proměnné.

Další ačkoliv zvláštní performance je používání ++$i namísto $i++ jedná se sice o cca 13% ovšem ale při algorytmu by jsme měli řešit i 13%.

Přikládám ještě odkaz na benchmark: http://www.phpbench.com/

Avatar
Michal
Člen
Avatar
Michal:4.5.2014 10:55

C++

template<typename T>
void selectionSort(std::vector<T>& vect)
{
   for (unsigned i = 0, j = 0; i < vect.size() - 1; ++i)
   {
      T min = vect[vect.size() - 1];
      // Hledání minima.
      for (j = i; j < vect.size() - 1; ++j)
         if (vect[j] < min)
            min = vect[j];
      // Prohození.
      std::swap(vect[i], vect[j]);
   }
}
Editováno
Odpovědět
Don’t worry if it doesn’t work right. If everything did, you’d be out of a job.
Avatar
Maxfx
Tvůrce
Avatar
Maxfx:2.7.2014 20:12
void selectionSort(int f[], int size)
{
        int min = 0;

        for(int i = 0; i < size; i++)
        {
                min = i;

                for(int j = i + 1; j < size; j++)
                {
                        if(f[min] > f[j]) min = j;
                }

                swap(f[i], f[min]);
        }
}
Odpovědět
Být ovládán znamená být sledován, pod dohledem, špehován, veden, uzákoněn, reglementován, ohrazen, indoktrinován, pře...
Avatar
Neaktivní uživatel:10.1.2017 17:27

Optimalizovaný kód pre PHP:

function selectionDesc(array $input) {

    $arrayLength = sizeof($input);
    $key = null;

    $i = 0;
    while($i < $arrayLength) {

        $key = $i;
        $min = $input[$i];

        $j = $i + 1;
        while($j < $arrayLength) {

            if($input[$j] > $min) {
                $key = $j;
                $min = $input[$j];
            }

            ++$j;

        }

        $input[$key] = $input[$i];
        $input[$i] = $min;
        ++$i;

    }

    return $input;

}

Pre opačné usporiadanie stačí otočiť porovnávanie v podmienke.

Odpovědět
Neaktivní uživatelský účet
Avatar
citizen4505
Člen
Avatar
citizen4505:23.10.2020 10:17

Kod pro Python

def selectionSort(array):
# O(n^2)
    for i in range(len(array)):

        min_index = i
        # prochazime cele pole

        for j in range(i+1, len(array)):
            # projedeme zbyvajici prvky pole (protoze i+1)
            if(array[min_index] > array[j]):
                # nalezli jsme nejmensi prvek, tak si ulozime jeho index
                min_index = j

        # prohodime prvek z prvniho iteracniho cyklu s nejmensim nalezenym
        array[i], array[min_index] = array[min_index], array[i]

    return array
Odpovědět
Matematika je programovacim jazykem vesmiru...
Avatar
Odpovídá na Don
Lenka Polláková:28.11.2021 2:53

To je tak no,jednoduchosť sa ťažko chápe. Rozumiem

Avatar
Eva Šimerková:8.1.2022 10:20

Ahoj, moc jsem nepochopila, jak mám funkci vložit do svého programu.
Učím se programovat v C# a nevím, jestli mám nahradit to "static void Main(string[] args)" tím "public static int[] selectionSort(int[] pole)" a jestli mám to pole určit předtím nebo potom. Bude potom program fungovat? Nebo tam musím zadat ještě něco?

Nejnovější komentáře jsou na konci poslední stránky.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 26.