Birləşdirməli nizamlama(ing. merge sort, ru. сортировка слиянием) -bir neçə çeşidlənən (giriş) siyahının bir (çıxış) siyahıda birləşdirilməsindən ibarət çeşidləmə üsulu. Birinci siyahının ilk elementi götürülür və ikinci siyahının birinci elementi ilə müqayisə olunur; seçim edildikdən sonra elementin seçildiyi siyahının başlanğıcının göstəricisi növbəti elementə keçir və beləliklə, siyahılardan birinin sonunadək hərəkət edilir. Bu metod bir neçə siyahıya tətbiq edilə bilər. Maraqlıdır ki, iş yalnız siyahıların birinci elementləri ilə aparılır. Birləşdirməli çeşidləmə alqoritmi 1945-ci ildə Con fon Neyman tərəfindən icad olunub.
Birləşdirməklə nizamlama alqoritmi Con fon Neyman tərəfindən 1945 -ci ildə ixtira edilmiş, parçala və idarə etmə mexanizminə əsaslanan nizamlama alqoritmidir. Alqoritm ən pis, ən yaxşı və orta halda eyni sayda əməliyyat yerinə yetirir, O(n log n). Ən pis halda tutduğu yer isə O(n).
Alqoritm
Bir qayda olaraq birləşdirməklə nizamlama alqoritmi aşağıdakı kimi işləyir:
- Sıralanmamış siyahını hər birində bir element olmaqla n alt-siyahıya böl. (1 elementdən ibarət olan siyahı nizamlanmış hesab edilir).
- Bir alt-siyahı qalanadək təkrar olaraq alt-siyahıları sıralanmış qaydada birləşdir. Bu nizamlanmış siyahı olacaq.
Yuxarıdan-aşağı implementasiya
Nümunə C kodu birləşdirməklə nizamlama alqoritminin yuxarıdan-aşağı implementasiyanı istifadə etməklə siyahını alt-siyahılara bölür (alt-siyahının ölçüsü 1 olanadək), sonra bu alt-siyahıları nizamlanmış siyahı yaratmaq üçün birləşdirir.
// Massiv A[] nizamlanmalıdır; massiv B[] işçi massivdir. TopDownMergeSort(A[], B[], n) { CopyArray(A, 0, n, B); // A[] massivini B[]massivinə kopyala TopDownSplitMerge(B, 0, n, A); // elementləri B[] massivindən A[] massivinə nizamla } // iBegin massivə daxildir; iEnd isə daxil deyil (A[iEnd] çoxluğa daxil deyil). TopDownSplitMerge(B[], iBegin, iEnd, A[]) { if(iEnd - iBegin < 2) // əgər size == 1 return; // bunu nizamlanmış fərz et iMiddle = (iEnd + iBegin) / 2; // iMiddle = orta nöqtə // rekursiv olaraq hər iki siyahını A[] massivindən B[] massivinə nizamla TopDownSplitMerge(A, iBegin, iMiddle, B); // sol siyahını nizamla TopDownSplitMerge(A, iMiddle, iEnd, B); // sağ siyahını nizamla // nəticədə alınan siyahıları B[]massivindən A[] massivinə birləşdir TopDownMerge(B, iBegin, iMiddle, iEnd, A); } // Sol siyahı A[ iBegin:iMiddle-1]. // Sağ siyahı A[iMiddle:iEnd-1 ]. // Nəticə B[ iBegin:iEnd-1 ]. TopDownMerge(A[], iBegin, iMiddle, iEnd, B[]) { i = iBegin, j = iMiddle; // Sol və ya sağ siyahılarda element olduqca... for (k = iBegin; k < iEnd; k++) { if (i < iMiddle && (j >= iEnd || A[i] <= A[j])) { B[k] = A[i]; i = i + 1; } else { B[k] = A[j]; j = j + 1; } } } CopyArray(A[], iBegin, iEnd, B[]) { for(k = iBegin; k < iEnd; k++) B[k] = A[k]; }
Aşağıdan-yuxarı implementasiya
Nümunə C kodu birləşdirməklə nizamlama alqoritminin aşağıdan-yuxarı implementasiyanı istifadə etməklə siyahını nizamlayır:
// massiv A[] nizamlanmalıdır, massiv B[] işçi massivdir. void BottomUpMergeSort(A[], B[], n) { for (width = 1; width < n; width = 2 * width) { for (i = 0; i < n; i = i + 2 * width) { // İki siyahını birləşdir: //A[i:i+width-1] və A[i+width:i+2*width-1]: B[] massivinə // və ya A[i:n-1]-i B[] massivinə kopyala ( if(i+width >= n) ) BottomUpMerge(A, i, min(i+width, n), min(i+2*width, n), B); } // B massivi uzunluğu 2*width olan siyahılardan ibarətdir // Növbəti iterasiya üçün B massivini A massivinə kopyala. // Daha səmərəli implementasiya A və B massivlərinin rolunu dəyişmək olar CopyArray(B, A, n); // indi A massivi uzunluğu 2*width olan siyahılarldan ibarədir } } // Sol siyahı A[iLeft :iRight-1]. // Sağ siyahı A[iRight:iEnd-1 ]. BottomUpMerge(A[], iLeft, iRight, iEnd, B[]) { i = iLeft, j = iRight; // Sol və ya sağ siyahılarda element olduqca... for (k = iLeft; k < iEnd; k++) { if (i < iRight && (j >= iEnd || A[i] <= A[j])) { B[k] = A[i]; i = i + 1; } else { B[k] = A[j]; j = j + 1; } } } void CopyArray(B[], A[], n) { for(i = 0; i < n; i++) A[i] = B[i]; }
Analiz
Ən pis halda (worst case) birləşdirməklə nizamlama alqoritmi sürətli nizamlama alqoritminin ortalama halından (average case) 39% az müqayisə əməliyyatı yerinə yetirir. Birləşdirməklə nizamlama alqoritminin ən pis hal üçün mürəkkəbliyi: O(n log n) - bu sürətli nizamlama alqoritminin ən yaxşı (best case) hal üçün mürəkkəbliyinə bərabərdir.
İstinadlar
- Knuth, Donald (1998). "Section 5.2.4: Sorting by Merging". Sorting and Searching. The Art of Computer Programming. 3 (2nd ed.). Addison-Wesley. pp. 158–168. .
Ədəbiyyat
- İsmayıl Calallı (Sadıqov), “İnformatika terminlərinin izahlı lüğəti”, 2017, “Bakı” nəşriyyatı, 996 s.
wikipedia, oxu, kitab, kitabxana, axtar, tap, meqaleler, kitablar, oyrenmek, wiki, bilgi, tarix, tarixi, endir, indir, yukle, izlə, izle, mobil, telefon ucun, azeri, azəri, azerbaycanca, azərbaycanca, sayt, yüklə, pulsuz, pulsuz yüklə, haqqında, haqqinda, məlumat, melumat, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, şəkil, muisiqi, mahnı, kino, film, kitab, oyun, oyunlar, android, ios, apple, samsung, iphone, pc, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, web, computer, komputer
Birlesdirmeli nizamlama ing merge sort ru sortirovka sliyaniem bir nece cesidlenen giris siyahinin bir cixis siyahida birlesdirilmesinden ibaret cesidleme usulu Birinci siyahinin ilk elementi goturulur ve ikinci siyahinin birinci elementi ile muqayise olunur secim edildikden sonra elementin secildiyi siyahinin baslangicinin gostericisi novbeti elemente kecir ve belelikle siyahilardan birinin sonunadek hereket edilir Bu metod bir nece siyahiya tetbiq edile biler Maraqlidir ki is yalniz siyahilarin birinci elementleri ile aparilir Birlesdirmeli cesidleme alqoritmi 1945 ci ilde Con fon Neyman terefinden icad olunub Birlesdirmekle nizamlama alqoritmi Con fon Neyman terefinden 1945 ci ilde ixtira edilmis parcala ve idare etme mexanizmine esaslanan nizamlama alqoritmidir Alqoritm en pis en yaxsi ve orta halda eyni sayda emeliyyat yerine yetirir O n log n En pis halda tutdugu yer ise O n AlqoritmBirlesdirmekle nizamlama alqoritminin animasiyasi Siralanacaq elementler noqtelerle tesvir olunub Bir qayda olaraq birlesdirmekle nizamlama alqoritmi asagidaki kimi isleyir Siralanmamis siyahini her birinde bir element olmaqla n alt siyahiya bol 1 elementden ibaret olan siyahi nizamlanmis hesab edilir Bir alt siyahi qalanadek tekrar olaraq alt siyahilari siralanmis qaydada birlesdir Bu nizamlanmis siyahi olacaq Yuxaridan asagi implementasiya Numune C kodu birlesdirmekle nizamlama alqoritminin yuxaridan asagi implementasiyani istifade etmekle siyahini alt siyahilara bolur alt siyahinin olcusu 1 olanadek sonra bu alt siyahilari nizamlanmis siyahi yaratmaq ucun birlesdirir Massiv A nizamlanmalidir massiv B isci massivdir TopDownMergeSort A B n CopyArray A 0 n B A massivini B massivine kopyala TopDownSplitMerge B 0 n A elementleri B massivinden A massivine nizamla iBegin massive daxildir iEnd ise daxil deyil A iEnd coxluga daxil deyil TopDownSplitMerge B iBegin iEnd A if iEnd iBegin lt 2 eger size 1 return bunu nizamlanmis ferz et iMiddle iEnd iBegin 2 iMiddle orta noqte rekursiv olaraq her iki siyahini A massivinden B massivine nizamla TopDownSplitMerge A iBegin iMiddle B sol siyahini nizamla TopDownSplitMerge A iMiddle iEnd B sag siyahini nizamla neticede alinan siyahilari B massivinden A massivine birlesdir TopDownMerge B iBegin iMiddle iEnd A Sol siyahi A iBegin iMiddle 1 Sag siyahi A iMiddle iEnd 1 Netice B iBegin iEnd 1 TopDownMerge A iBegin iMiddle iEnd B i iBegin j iMiddle Sol ve ya sag siyahilarda element olduqca for k iBegin k lt iEnd k if i lt iMiddle amp amp j gt iEnd A i lt A j B k A i i i 1 else B k A j j j 1 CopyArray A iBegin iEnd B for k iBegin k lt iEnd k B k A k Asagidan yuxari implementasiya Numune C kodu birlesdirmekle nizamlama alqoritminin asagidan yuxari implementasiyani istifade etmekle siyahini nizamlayir massiv A nizamlanmalidir massiv B isci massivdir void BottomUpMergeSort A B n for width 1 width lt n width 2 width for i 0 i lt n i i 2 width Iki siyahini birlesdir A i i width 1 ve A i width i 2 width 1 B massivine ve ya A i n 1 i B massivine kopyala if i width gt n BottomUpMerge A i min i width n min i 2 width n B B massivi uzunlugu 2 width olan siyahilardan ibaretdir Novbeti iterasiya ucun B massivini A massivine kopyala Daha semereli implementasiya A ve B massivlerinin rolunu deyismek olar CopyArray B A n indi A massivi uzunlugu 2 width olan siyahilarldan ibaredir Sol siyahi A iLeft iRight 1 Sag siyahi A iRight iEnd 1 BottomUpMerge A iLeft iRight iEnd B i iLeft j iRight Sol ve ya sag siyahilarda element olduqca for k iLeft k lt iEnd k if i lt iRight amp amp j gt iEnd A i lt A j B k A i i i 1 else B k A j j j 1 void CopyArray B A n for i 0 i lt n i A i B i AnalizRekursiv birlesdirmekle nizamlama alqoritmi 7 tam ededden ibaret olan massivi nizamlamaq ucun istifade olunmusdur yuxaridan asagi implementasiya En pis halda worst case birlesdirmekle nizamlama alqoritmi suretli nizamlama alqoritminin ortalama halindan average case 39 az muqayise emeliyyati yerine yetirir Birlesdirmekle nizamlama alqoritminin en pis hal ucun murekkebliyi O n log n bu suretli nizamlama alqoritminin en yaxsi best case hal ucun murekkebliyine beraberdir IstinadlarKnuth Donald 1998 Section 5 2 4 Sorting by Merging Sorting and Searching The Art of Computer Programming 3 2nd ed Addison Wesley pp 158 168 ISBN 0 201 89685 0 EdebiyyatIsmayil Calalli Sadiqov Informatika terminlerinin izahli lugeti 2017 Baki nesriyyati 996 s