IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

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
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.

 
Odpovedať
25.9.2011 16:21
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ť
25.9.2011 22:03
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, ", ");
 
Odpovedať
28.7.2012 13:20
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/

 
Odpovedať
16.4.2013 15:23
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é 4.5.2014 10:57
Odpovedať
4.5.2014 10:55
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ť
2.7.2014 20:12
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ť
10.1.2017 17:27
Neaktivní uživatelský účet
Avatar
citizen4505
Brigádník
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ť
23.10.2020 10:17
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

 
Odpovedať
28.11.2021 2:53
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?

 
Odpovedať
8.1.2022 10:20
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.

Zatiaľ nikto nevložil komentár - buď prvý!