New Immissions/Updates:
boundless - educate - edutalab - empatico - es-ebooks - es16 - fr16 - fsfiles - hesperian - solidaria - wikipediaforschools
- wikipediaforschoolses - wikipediaforschoolsfr - wikipediaforschoolspt - worldmap -

See also: Liber Liber - Libro Parlato - Liber Musica  - Manuzio -  Liber Liber ISO Files - Alphabetical Order - Multivolume ZIP Complete Archive - PDF Files - OGG Music Files -

PROJECT GUTENBERG HTML: Volume I - Volume II - Volume III - Volume IV - Volume V - Volume VI - Volume VII - Volume VIII - Volume IX

Ascolta ""Volevo solo fare un audiolibro"" su Spreaker.
CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Mergesort - Wikipedia

Mergesort

Van Wikipedia

Mergesort

Mergesort is een recursief sorteer-algoritme. Mergesort werkt door een rij te sorteren elementen eerst in twee ongeveer even grote (ogesorteerde) rijen te verdelen en dat te herhalen totdat er alleen nog rijen met één element over zijn. Dan worden de rijen weer twee aan twee samengevoegd, geritst als het ware, waarbij steeds de voorsten van de twee gesorteerde rijen met elkaar worden vergeleken om te bepalen welke het volgende element in de gesorteerde rij moet worden. Dit samenvoegen van gesorteerde rijen wordt op een steeds hoger niveau herhaald totdat er nog één (uiteraard gesorteerde) rij over is.

Hier volgt een pseudocode-voorbeeld vertrekkend van de rij {2,1,2*,3}:

verdeel {2,1,2',3} in twee delen: {2,1} en {2',3}
verdeel {2,1} in twee delen: {2} en {1}
voeg {2} en {1} op volgorde samen tot {1,2}
verdeel {2',3} in twee delen: {2'} en {3}
voeg {2'} en {3} op volgorde samen tot {2',3}
voeg {1,2} en {2',3} op volgorde samen tot {1,2,2',3}

Als bij het samenvoegen in dezelfde volgorde wordt gewerkt als bij het verdelen, is het algoritme stabiel: de volgorde van 2 en 2' in het voorbeeld blijft bij het sorteren onveranderd.

[bewerk] Prolog-voorbeeld

Hier is een beschrijving van mergesort in Prolog - een logische programmeertaal. Prolog heeft geen arrays en verzamelingen zowel als arrays worden dikwijls voorgesteld door "lijsten": een lege lijst is [] en een lijst waarvan het eerste element X is en wat achter X komt is T, wordt voorgesteld als [X|T] wat achter % staat is commentaar mergesort is als een procedure met twee argumenten: het eerste is input (de lijst die we willen sorteren) en de tweede is output, namelijk het resultaat van de sorteeroperatie

mergesort(Lijst, SortedLijst) :- % SortedLijst is Lijst gesorteerd indien

       (Lijst = [] ->
               SortedLijst = []     % indien Lijst leeg is dan is zijn gesorteerde versie ook leeg
       ;
               split(Lijst, Lijst1, Lijst2),  % anders: splits Lijst in twee delen
               mergesort(Lijst1, SortedLijst1),
               mergesort(Lijst2, SortedLijst2),
               merge(SortedLijst1, SortedLijst2, SortedLijst)
       ).

merge(L1, L2, Result) :-

       (
         L1 = [] ->
               Result = L2   % mergen van een lege lijst en L2 geeft als resultaat L2
       ;
         L2 = [] ->
               Result = L1   % idem voor L1
       ;
         L1 = [X1|R1],       % L1 is niet leeg, dus heeft een eerst element en een rest
         L2 = [X2|R2],       % idem voor L2
         (X1 < X2 ->
               Result = [X1|RestResult],          % X1 is kleiner dan X2 en moet dus van voor in het
               merge(R1, [X2|R2], RestResult)     % resultaat; vervolgens berekenen we de rest ervan
         ;
               Result = [X2|RestResult],          % X1 is niet kleiner dan X2; dus moet X2 van voor
               merge([X1|R1], R2, RestResult)     % in het resultaat
         )
       ).


split([], [], []). % een lege lijst kan men enkel splitsen in twee lege lijsten split([X], [X], []). % een lijst met slechts 1 element, kan men splitsen in die lijst en een lege lijst split([A,B|Rest], [A|R1], [B|R2]) :- % een lijst die begint met A en B, splitst men door

       split(Rest, R1, R2).          % A in de ene output lijst te steken, B in de andere en dan
                                     % bereken je de rest van de output lijsten vertrekkend van de
                                     % invoer zonder A en B

[bewerk] Java-voorbeeld

Het onderstaand Java-codefragment sorteert de array ao (dat kan een String-array zijn, maar ook een array van een ander type zolang het maar Comparable is):

 void mergesort(Object[] ao){
   if (ao.length <= 1){
     return; // klaar
   }
   /* splitsen */
   int i1= ao.length / 2;
   Object[] aoL= new Object[i1];
   for (int i= 0; i < i1; i++){
     aoL[i]= ao[i];
   }
   Object[] aoR= new Object[ao.length - i1];
   for (int i= i1; i < ao.length; i++){
     aoR[i - i1]= ao[i];
   }
   /* subreeksen sorteren */
   mergesort(aoL);
   mergesort(aoR);
   /* subreeksen samenvoegen (ritsen) */
   /* ao kunnen we hergebruiken */
   int iL= 0;
   int iR= 0;
   for (int i= 0; i < ao.length; i++){
     if (iL >= aoL.length){
       ao[i]= aoR[iR++];
     } else if (iR >= aoR.length){
       ao[i]= aoL[iL++];
     } else if (((Comparable) aoL[iL]).compareTo((Comparable) aoR[iR]) <= 0){
       ao[i]= aoL[iL++];
     } else{
       ao[i]= aoR[iR++];
     }
   }
 }

[bewerk] C-voorbeeld

De volgende C functie sorteert de array "data" met "lengte" aantal elementen volgens het mergesort-algoritme:

 void mergesort(int data[],int lengte){
   int i1=0,i2=0; //huidige plaats in groepen
   int *groep1,*groep2; //begin van groepen
   int lengte1,lengte2; //lengtes van groepen
   int gesorteerd[lengte];  //gesorteerde data
   int tijdelijk;
   if(lengte>1){ //indien lengte 1 of kleiner is valt er niets te sorteren
     //verdeel in groepen
     groep1=data;groep2=data+lengte/2;
     //zoek lengte van elke groep
     lengte1=lengte/2;
     lengte2=lengte-lengte1;
     //mergesort
     mergesort(groep1,lengte1);
     mergesort(groep2,lengte2);
     //merge
     for(tijdelijk=0;tijdelijk<lengte;tijdelijk++){
       if(i1==Lengte1){  //einde groep1,neem huidig van 2
         gesorteerd[tijdelijk]=groep2[i2];
         i2++;
       }else if(i2==Lengte2){ //einde groep2,neem huidig van 1
         gesorteerd[tijdelijk]=groep1[i1];
         i1++;
       }else if(groep1[i1]<groep2[i2]){
         //huidig van 1 is kleiner,neem dit
         gesorteerd[tijdelijk]=groep1[i1];
         i1++;
       }else{
         //huidig van 2 is kleiner,neem dit
         gesorteerd[tijdelijk]=groep2[i2];
         i2++;
       }
     }
     //kopieer gesorteerd naar data
     for(tijdelijk=0;tijdelijk<lengte;tijdelijk++) data[tijdelijk]=gesorteerd[tijdelijk];
   }
 }
 

Static Wikipedia (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2006 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia February 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu