Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – Selection sort

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej 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
Odpovedá 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í :)

Odpovedať
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
Odpovedá 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]);
   }
}
Editované
Odpovedať
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]);
        }
}
Odpovedať
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.

Odpovedať
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
Odpovedať
Matematika je programovacim jazykem vesmiru...
Avatar
Odpovedá 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?

Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 26.