Professional Documents
Culture Documents
Rikiavimas C++
Rikiavimas C++
http://www.cplusplus.com/reference/algorithm/sort/
http://www.cplusplus.com/reference/functional/greater/
Pavyzdžiai:
int n=5, A[5]={12, 15, 0, -2, 4};
sort(A, A+n); // išrikiuoja didėjančiai
Užduotis 1 parašykite programą, kuri duotus duomenis, n sveikųjų skaičių, surikiuotų standartine sort funkcija
mažėjančiai ir didėjančiai
Išrinkimo algoritmas (angl. selection sort) – vienas iš paprasčiausių rikiavimo algoritmų. Pagrindinis
principas – minimalų elementą reikia rašyti į pirmą duomenų sekos vietą, tada taikyti tą patį principą posekiui be
pirmojo elemento ir t. t.1
Pradėdami nuo nulinio ieškome mažiausio elemento sąraše ir randame, kad mažiausias elementas A[3] = -5,
tada jį sukeičiame su nuliniu swap(A[0], A[3]). Po sukeitimo mūsų sąrašas atrodys taip:
Paiešką tęsiame nuo pirmojo, nes nulinis jau savo vietoje. Randame, kad mažiausias elementas A[2] = 3,
jį sukeičiame su pirmuoju swap(A[1], A[2]). Po sukeitimo mūsų sąrašas atrodys taip:
Sukeitimui mums reikia žinoti du indeksus: pirmasis bus išorinio ciklo indeksas, antrąjį reikia išsisaugoti.
Tai galima padaryti keliais būdais, pavyzdžiui:
1
https://lt.wikipedia.org/wiki/I%C5%A1rinkimo_rikiavimo_algoritmas
Visas išrinkimo algoritmas atrodytų taip:
for (int i=0; i<n-1; i++) for (int i=0; i<n-1; i++)
{ {
int maz = i; int maz = A[i], maznr=i;
for (int j=i+1; j<n; j++) for (int j=i+1; j<n; j++)
{ {
if (A[maz]>A[j]) if (maz > A[j])
maz = j; {
} maz = A[j];
swap (A[i], A[maz]); maznr = j;
} }
}
swap (A[i], A[maznr]);
}
Kadangi sprendžiam uždavinius ne visada reikia efektyvumo, tai rikiavimo algoritmą galima paprastinti taip:
kiekvieną kartą, kai einamas elementas mažesnis už į-tąjį, jį sukeisti:
Vietoj vieno pakeitimo, programa jų darys daugiau, bet rezultate mažiausias elementas vis tiek atidurs nulinėje
pozicijoje ir veiksmus bus galima kartoti nuo pirmojo elemento.
Užduotis 2. Parašykite programą, kuri duotus duomenis, n sveikųjų skaičių, išrikiuotų Išrinkimo algoritmu
didėjančiai ir supaprastintu Išrinkimo algoritmu mažėjančiai.
Burbulo algoritmas (angl. bubble sort) - vienas iš paprastų, bet nelabai efektyvių rikiavimo
algoritmų. Algoritmo principas – nuosekliai iš eilės peržiūrėti gretimų elementų poras, prireikus elementus
sukeisti, perkeliant mažesnį arčiau pradžios.
Antras praėjimas:
(1 4 2 5 8) -> (1 4 2 5 8)
(1 4 2 5 8) -> (1 2 4 5 8)
(1 2 4 5 8) -> (1 2 4 5 8)
(1 2 4 5 8) -> (1 2 4 5 8)
Dabar masyvo elementai išdėstyti tinkama tvarka, bet algoritmas to nežino. Algoritmui reikia vieno praėjimo
be pakeitimų, kad žinotų jog elementai reikiama tvarka.
Trečias praėjimas:
(1 2 4 5 8) -> (1 2 4 5 8)
(1 2 4 5 8) -> (1 2 4 5 8)
(1 2 4 5 8) -> (1 2 4 5 8)
(1 2 4 5 8) -> (1 2 4 5 8)
Galiausiai algoritmas baigė savo darbą.
Užduotis 3. Parašykite programą, kuri duotus duomenis, n sveikųjų skaičių, išrikiuotų Burbulo algoritmu
didėjančiai. Burbulo algoritmo interpretaciją pabandykite pasirašyti patys.
2
https://lt.wikipedia.org/wiki/Burbulo_rikiavimo_algoritmas