Sortiranje "par-nepar" — разлика између измена

Садржај обрисан Садржај додат
Нова страница: {{algoritam-lat | slika=Odd even sort animation.gif | širina slike=250 | struktura=Niz | namena=sortiranje | vkompleksnos…
(нема разлике)

Верзија на датум 23. мај 2013. у 23:39

U informatici, odd–even sortiranje[1] predstavlja relativno jednostavan algoritam za sortiranje i razvijen je pre svega za korišćenje na paralelnim procesorima sa lokalnom povezanošću. Spada u grupu algoritama koji sortiraju poredjenjem i sličan je Bubble sort-u, sa kojim deli mnoge karakteristike. Ideja je da se porede svi parovi indeksa (nepar,par) susednih elemenata niza i, ako je taj par u pogrešnom poretku (prvi veći od drugog) elementi menjaju mesta. U sledećem koraku se postupak ponavlja za parove indeksa (par, nepar). Koraci se smenjuju izmedju te dve vrste parova dok se niz ne sortira.

Sortiranje "par-nepar"
Namena sortiranje
Struktura podataka Niz
Vremenska kompl. O(n²)


Sortiranje na paralelnim procesorima

Kod paralelnih procesora, koji imaju jednu vrednost po procesoru i lokalnu povezanost s leva u desno, procesori istovremeno izvršavaju upoređivanje i razmenu sa svojim susedima, naizmenično sa parovima nepar-par i par-nepar. Ovaj algoritam je predstavio N. Haberman 1972. godine.[2] i pokazalo se da je efikasan na ovakvim procesorima.

Algoritam poboljšava efikasnost u slučaju rada na mašinama koje podržavaju vise vrednosti po procesoru. U tzv. Baudet–Stevenson odd–even merge-splitting algoritmu svaki procesor sortira svoj podniz, koristeći bilo koji efikasan algoritam za sortiranje, a zatim vrši spajanje sortiranog podniza sa svojim susedom, koji vrši uparivanje (naizmenično uzimajući jednu, pa drugu vrstu parova u svakom koraku).[3]

Batcher- ov odd-even merge sort algoritam

Sličan, ali efikasniji algoritam za sortiranje je tzv. Batcher- ov odd-even merge sort, koji koristi operacije compare–exchange i perfect-shuffle.[4] Ovaj metod pokazao se efikasnim na paralelnim procesorima dalekog dometa konekcije.[5]


Algoritam

Ispod je predstavljen algoritam za jednoprocesorske mašine, nalik Bubble sort- u, jednostavan ali ne baš efikasan. Podrazumevamo da indeksiranje počinje od nule.

/* Assumes a is an array of values to be sorted. */
var sorted = false;
while(!sorted)
{
    sorted=true;
    for(var i = 1; i < list.length-1; i += 2)
    {
        if(a[i] > a[i+1])
        {
            swap(a, i, i+1);
            sorted = false;
        }
    }

    for(var i = 0; i < list.length-1; i += 2)
    {
        if(a[i] > a[i+1])
        {
            swap(a, i, i+1);
            sorted = false;
        }
    }
}

References

  1. ^ Phillips, Malcolm. Sort Techniques „Array Sorting” Проверите вредност параметра |url= (помоћ). Приступљено 3. 8. 2011. 
  2. ^ N. Haberman (1972) "Parallel Neighbor Sort (or the Glory of the Induction Principle)," CMU Computer Science Report (available as Technical report AD-759 248, National Technical Information Service, US Department of Commerce, 5285 Port Royal Rd Sprigfield VA 22151).
  3. ^ S. Lakshmivarahan, S. K. Dhall, and L. L. Miller (1984), Franz L. Alt and Marshall C. Yovits, ур., „Parallel Sorting Algorithms”, Advances in computers, Academic Press, 23: 295—351, ISBN 978-0-12-012123-6 
  4. ^ Robert Sedgewick (2003). Algorithms in Java, Parts 1-4 (3rd изд.). Addison-Wesley Professional. стр. 454—464. ISBN 978-0-201-36120-9. 
  5. ^ Allen Kent and James G. Williams (1993). Encyclopedia of Computer Science and Technology: Supplement 14. CRC Press. стр. 33—38. ISBN 978-0-8247-2282-1.