Valintalajittelu

Nykymaailmassa Valintalajittelu on jatkuvan keskustelun ja analyysin aihe. Olipa Valintalajittelu:llä yhteiskuntavaikutuksensa, historiallisen merkityksensä, kulttuurivaikutuksensa tai tieteellisen merkityksensä vuoksi tärkeä paikka keskustelun asialistalla. Muinaisista ajoista nykypäivään Valintalajittelu on herättänyt ihmiskunnan kiinnostusta ja uteliaisuutta, synnyttänyt syviä pohdiskeluja ja provosoinut jatkuvaa tutkimusta. Tässä artikkelissa tutkimme Valintalajittelu:n eri puolia ja paljastamme sen monet puolet ja sen merkityksen nykyisessä kontekstissa.

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