| Strukture podataka i algoritmi |
| 7.3 Quick Sort |
Quick Sort je veoma efikasan algoritam za sortiranje koji je izumeo C.A.R. Hoare. On se sastoji iz dve faze:
Ova osobina cini Quick Sort dobrim primerom "podeli i pokori" (divide and conquer) strategije za resavanje problema. (Primer ovog pristupa ste vec videli u proceduri za binarno pretrazivanje.) U Quick Sort-u, niz objekata koji treba sortirati delimo na dva dela i tada rekurzivno pozivamo Quick Sort da sortira dva manja dela, tj. mi delimo problem na dva manja i pokoravamo ga resavajuci manje probleme. Stoga, pokoravajuci deo Quick Sort procedure izgleda ovako:
quicksort( void *a, int low, int high )
{
int pivot;
/* Uslov prekida! */
if ( high > low )
{
pivot = partition( a, low, high );
quicksort( a, low, pivot-1 );
quicksort( a, pivot+1, high );
}
}
|
![]() Pocetni korak - Prvi deo |
![]() Sortira levi deo na isti nacin |
Zbog toga se bira srednji (pivot) element i deli tako da su svi objekti u donjem delu manji od srednjeg elementa, a da su svi objekti u gornjem delu veci od srednjeg elementa. U najopstijem slucaju, ne znamo nista o objektima koji se sortiraju, tako da je bilo koji izbor za srednji element dobar - a najjednostavnije je izabrati prvi element.
Kao ilustraciju ove ideje, mozete pogledati ovu animaciju, koja pokazuje algoritam za deljenje u kojem se objekti, koje treba sortirati, kopiraju iz originalnog niza u novi: objekti manji od srednjeg elementa se smestaju sa leve strane novog niza, a objekti veci od srednjeg elementa se smestaju sa desne strane. U poslednjem koraku, srednji element se stavlja na jedino preostalo mesto u nizu.
|
Animacija Quick Sort algoritma Ova animacija se bazira na predlozima Jeff-a Rohl-a; napisao ju je Woi Ang. |
|
Kljucni pojmovi |
|
Dalje na Quick Sort: Deljenje u mestu Nazad na Sadrzaj |