Kiválasztásos rendezés (algoritmus)

A Programozás Wiki wikiből

A kiválasztásos rendezés egy egyszerű, négyzetes időben futó rendezési algoritmus. Az alapötlet az, hogy kiválasztjuk a rendezendő tömb legkisebb elemét, és kicseréljük a tömb legelső elemével. Ezzel a tömb első eleme megkapta a végső értékét, és a feladat egyszerűsödött a tömb maradékának rendezésére. Az algoritmust addig ismételjük a maradék tömbön, amíg csak egy elem marad.

Pszeudokódban:

 for i in 1..hossz(tömb)-1 do   // az i. elem lesz a rendezendő résztömb első eleme
    minindex := i;
    for j in i+1..hossz(tömb) do   // minimum kiválasztás ciklusa
       if tömb[j]<tömb[minindex] then
          minindex := j;
       end;
    end;
    csere(tömb[i], tömb[minindex]);
 end;

Mint látható, a tömböt mindig ugyanannyiszor olvassuk és írjuk, a benne levő adatoktól függetlenül. (Az adatoktól egyedül az függ, hogy hányszor változik a minindex értéke.) Azt is könnyű belátni, hogy az összehasonlítások száma (n-1)+(n-2)+...+1 = n*(n-1)/2, vagyis a futási idő tényleg négyzetes.

A kiválasztásos rendezés általában lassabb a közvetlen beszúrásos rendezésnél, de a konzisztens futásideje bizonyos esetekben előnyt jelenthet (pl. valós idejű alkalmazások esetén). Nagyobb adathalmaz rendezéséhez érdemesebb a bonyolultabb, de gyorsabb algoritmusokat (gyorsrendezést vagy összefésülő rendezést) használni.

[szerkesztés] Megvalósítás különböző nyelveken

[szerkesztés] Go

func kiv_rend(arr *[]int) {
        n := len(*arr)
        for i:=0; i<n; i++ {
                min := i
                for j:=i+1; j<n; j++ {
                        if (*arr)[j] < (*arr)[min] {
                                min = j
                        }
                }
                (*arr)[i],(*arr)[min] = (*arr)[min],(*arr)[i]
        }
}
Személyes eszközök