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 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
- ^ Phillips, Malcolm. Sort Techniques „Array Sorting” Проверите вредност параметра
|url=
(помоћ). Приступљено 3. 8. 2011. - ^ 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).
- ^ 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
- ^ Robert Sedgewick (2003). Algorithms in Java, Parts 1-4 (3rd изд.). Addison-Wesley Professional. стр. 454—464. ISBN 978-0-201-36120-9.
- ^ 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.