Valintalajittelu

Nykyään Valintalajittelu:stä on tullut yleinen kiinnostava aihe, joka on kiinnittänyt suuren yleisön huomion. Valintalajittelu:n merkitys on synnyttänyt keskustelua, joka vaihtelee poliittisista ja yhteiskunnallisista piireistä jokapäiväisiin keskusteluihin. Vuosikymmenten ajan Valintalajittelu on ollut tutkimuksen ja tutkimuksen kohteena eri tiedonaloilla, mikä on synnyttänyt valtavasti kertynyttä tietoa sen merkityksestä ja vaikutuksista nyky-yhteiskuntaan. Tässä artikkelissa tutkimme Valintalajittelu:n eri puolia ja sen vaikutusta jokapäiväiseen elämäämme sekä analysoimme sen kehitystä ajan mittaan ja sen tulevia vaikutuksia.

Animaatio valintalajittelun etenemisestä.

Valintalajittelu (engl. selection sort) on tietojenkäsittelytieteessä tehoton mutta yksinkertainen ja intuitiivinen lajittelualgoritmi. Sen keskimääräinen asymptoottinen suoritusaika on O(n2).

Algoritmi

Algoritmi voidaan ilmaista seuraavasti:

  • Etsitään taulukon pienin alkio ja vaihdetaan se taulukon ensimmäiseksi alkioksi.
  • Nyt ensimmäinen alkio on pienin.
  • Etsitään taulukon toisesta alkiosta alkaen pienin arvo ja vaihdetaan se toiseksi alkioksi.
  • Nyt kaksi ensimmäistä alkiota ovat suuruusjärjestyksessä.
  • Tehdään sama kolmannelle alkiolle, neljännelle alkiolle...
  • Kun toiseksi viimeinen alkio on saatu käsiteltyä, koko taulukko on järjestyksessä.
T: taulukko
first: T:n ensimmäinen lajiteltava indeksi
last: T:n viimeinen lajiteltava indeksi

for i := first to last – 1 do
    min := pienin alkio väliltä T...T
    vaihda T <–> min
end for

Tällöin silmukkainvariantti on:

  • T, ... , T on järjestyksessä
  • TT, ... , T, kun i > 0

Toteutus

Esimerkki viiden luvun valintalajittelusta. Listan pienin luku vaihtaa listan ensimmäisen luvun kanssa paikkaa. Loppulistan pienin (eli listan toiseksi pienin) luku vaihtaa listan toisen luvun kanssa paikkaa. Näin jatkaen lista lajittuu.

C++-kielellä koko algoritmi, mukaan lukien minimiarvon etsiminen, voidaan kirjoittaa seuraavasti:

void selectionSort(int T, int pituus)
{
  int i, j, min;

  for (i = 0; i < pituus - 1; i++)
  {
    min = i;
    for (j = i+1; j < pituus; j++)
      if (T < T)
        min = j;

    swap(T, T);
  }
}

Katso myös

Algoritmeista

Muita lajittelualgoritmeja

Aiheesta muualla

Kirjallisuutta