Kuplalajittelu (bubble sort)

  • Published on
    21-Jan-2016

  • View
    33

  • Download
    0

Embed Size (px)

DESCRIPTION

Kuplalajittelu (bubble sort). Verrataan vierekkisi taulukon alkioita ja vaihdetaan niiden paikkaa tarvittaessa Jokaisella iteraatiolla pienin alkio lajittelemattomien joukosta kuplii oikealle paikalleen lajiteltujen joukkoon. Kuplalajittelu (bubble sort). Kuplalajittelu C-kielell. - PowerPoint PPT Presentation

Transcript

  • Kuplalajittelu (bubble sort)Verrataan vierekkisi taulukon alkioita ja vaihdetaan niiden paikkaa tarvittaessaJokaisella iteraatiolla pienin alkio lajittelemattomien joukosta kuplii oikealle paikalleen lajiteltujen joukkoon

  • Kuplalajittelu (bubble sort)

  • Kuplalajittelu C-kielellvoid kuplalajittelu(alkio a[], int l, int r) { int i, j; for(i = l; i i; j--) VERTVAIHDA(a[j - 1], a[j]); }

    lajitellaan a[l]..a[r]

    Kydn kaikki alkiot lpi

  • Kuplalajittelun analyysiHuonoimmassa tapauksessa suoritetaan n(n-1)/2 vertailua ja vaihtoa n-1 i n-1 i=1 j=11= i=1i=n(n-1)/2

  • Kuorilajittelu (shellsort)h-lajittelu sekvenssille lisyksi, pttyen arvoon 1Esim. 3280-lajittelu, sitten 1093-lajittelu, sitten 364-lajittelu, sitten 121-lajittelu, sitten 40-lajittelu, sitten 13-lajittelu, sitten 4-lajittelu ja lopuksi 1-lajitteluMenetelmn tehokkuus perustuu alkioiden siirtmiseen pitki matkoja

  • Ensin 13-lajittelu, sitten 4-lajitteluA S O R T I N G E X A M P L EA E O R T I N G E X A M P L S

    A E O R T I N G E X A M P L SA E O R T I N G E X A M P L SA E N R T I O G E X A M P L SA E N G T I O R E X A M P L SA E N G E I O R T X A M P L SA E N G E I O R T X A M P L SA E A G E I N R T X O M P L SA E A G E I N M T X O R P L SA E A G E I N M P X O R T L SA E A G E I N M P L O R T X SA E A G E I N M P L O R T X S

  • 1-lajitellaan,4-lajiteltu tiedostoA I A G E L E M P S N R T X OA I A G E L E M P S N R T X OA A I G E L E M P S N R T X OA A I G E L E M P S N R T X OA A E G I L E M P S N R T X OA A E G I L E M P S N R T X OA A E E G I L M P S N R T X OA A E E G I L M P S N R T X OA A E E G I L M P S N R T X OA A E E G I L M P S N R T X OA A E E G I L M N P S R T X OA A E E G I L M N P R S T X OA A E E G I L M N P R S T X OA A E E G I L M N P R S T X OA A E E G I L M N O P R S T X

  • Kuorilajittelu (shellsort)void kuorilajittelu(alkio a[], int l, int r) { int i, h; for(h = 1; h 0; h /= 3) for(i = l + h; i = l + h && PIENEMPI(v, a[j-h])) { a[j] = a[j - h]; j -= h; } a[j] = v; }}

    lajitellaan a[l]..a[r]

    h-lajittelutaikasekvenssilleh:n arvojalisyslajittelu, kunh=1

  • Kuorilajittelun h:n arvotMit sekvenssi kytetn?1,4,13,40,121, ei hullumpi, helppo laskea1,3,7,21,48,112, suunnilleen paras tunnettuAvoimia kysymyksi:Onko olemassa parempia sekvenssej?Keskimrinen ajoaika O(N1+C) ? O(N lg N) ?

  • Jakaumalajittelu(distribution counting)Oletetaan tietueen avaimen olevan kokonaisluku [0,k]Lasketaan kullekin avaimelle sit pienempien avaimien lukumr. Tmn tiedon avulla avain saadaan oikeaan paikkaan.Esim. jos on 17 x: pienempi avaimia. x kuuluu paikkaan 18.

  • Jakaumalajittelu(distribution counting40a113243340b123423451lkmSyte: a[l]a[r]Tulos: b[l]b[r]Aputaulukko: lkm[0]lkm[m], miss m isoin avain

  • Jakaumalajittelu(distribution counting4a1343b0000lkm00123401234Syte: a[l]a[r]Tulos: b[l]b[r]Aputaulukko: lkm[0]lkm[m], miss m isoin avainlukumrien alustaminen 23451

  • Jakaumalajittelu(distribution counting4a1343b000lkm00123401234lukumrien laskentaSyte: a[l]a[r]Tulos: b[l]b[r]Aputaulukko: lkm[0]lkm[m], miss m isoin avain123451

  • Jakaumalajittelu(distribution counting4a1343b01lkm00123401234lukumrien laskentaSyte: a[l]a[r]Tulos: b[l]b[r]Aputaulukko: lkm[0]lkm[m], miss m isoin avain1234510

  • Jakaumalajittelu(distribution counting4a1343b11lkm00123401234lukumrien laskentaSyte: a[l]a[r]Tulos: b[l]b[r]Aputaulukko: lkm[0]lkm[m], miss m isoin avain2345110

  • Jakaumalajittelu(distribution counting4a1343b101lkm00123401234lukumrien laskentaSyte: a[l]a[r]Tulos: b[l]b[r]Aputaulukko: lkm[0]lkm[m], miss m isoin avain234512

  • Jakaumalajittelu(distribution counting4a1343b1022lkm00123401234lukumrien laskentaSyte: a[l]a[r]Tulos: b[l]b[r]Aputaulukko: lkm[0]lkm[m], miss m isoin avain23451

  • Jakaumalajittelu(distribution counting4a1343b1022lkm00123401234Syte: a[l]a[r]Tulos: b[l]b[r]Aputaulukko: lkm[0]lkm[m], miss m isoin avain23451

  • Jakaumalajittelu(distribution counting4a1343b122lkm00123401234Syte: a[l]a[r]Tulos: b[l]b[r]Aputaulukko: lkm[0]lkm[m], miss m isoin avainkumulatiivinen summa 234510

  • Jakaumalajittelu(distribution counting4a1343b1122lkm00123401234Syte: a[l]a[r]Tulos: b[l]b[r]Aputaulukko: lkm[0]lkm[m], miss m isoin avainkumulatiivinen summa 23451

  • Jakaumalajittelu(distribution counting4a1343b1132lkm00123401234Syte: a[l]a[r]Tulos: b[l]b[r]Aputaulukko: lkm[0]lkm[m], miss m isoin avainkumulatiivinen summa 23451

  • Jakaumalajittelu(distribution counting4a1343b1135lkm00123401234Syte: a[l]a[r]Tulos: b[l]b[r]Aputaulukko: lkm[0]lkm[m], miss m isoin avainkumulatiivinen summa 23451

  • Jakaumalajittelu(distribution counting4a1343b1135lkm00123401234Syte: a[l]a[r]Tulos: b[l]b[r]Aputaulukko: lkm[0]lkm[m], miss m isoin avain23451

  • Jakaumalajittelu(distribution counting4a1343b11454lkm00123401234Syte: a[l]a[r]Tulos: b[l]b[r]Aputaulukko: lkm[0]lkm[m], miss m isoin avainalkioiden lajittelu 23451

  • Jakaumalajittelu(distribution counting4a1343b114541lkm10123401234Syte: a[l]a[r]Tulos: b[l]b[r]Aputaulukko: lkm[0]lkm[m], miss m isoin avainalkioiden lajittelu 23451

  • Jakaumalajittelu(distribution counting4a1343b1245lkm41130123401234Syte: a[l]a[r]Tulos: b[l]b[r]Aputaulukko: lkm[0]lkm[m], miss m isoin avainalkioiden lajittelu 23451

  • Jakaumalajittelu(distribution counting4a1343b1255lkm411340123401234Syte: a[l]a[r]Tulos: b[l]b[r]Aputaulukko: lkm[0]lkm[m], miss m isoin avainalkioiden lajittelu 23451

  • Jakaumalajittelu(distribution counting4a1343b1355lkm4113430123401234Syte: a[l]a[r]Tulos: b[l]b[r]Aputaulukko: lkm[0]lkm[m], miss m isoin avainalkioiden lajittelu 23451

  • Jakaumalajittelu(distribution counting4a1343b133513344lkm1012340123423451

  • Jakaumalajittelukuusi 0:aanelj 1:tkaksi 2:tanelj 3:talajiteltava taulukkonolla avainta on 0:aa pienempi,kuusi on 1:t pienempi, kymmenen on 2:ta pienempi,12 on kolmosta pienempi(keskimminen taulukko)

  • Jakaumalajitteluvoid jakaumalajittelu(alkio a[], int l, int r) { int i, j, lkm[m]; int b[ARVO_MAX]; for(j = 0; j < m; j++) lkm[j] = 0; for(i = l; i
  • Jakaumalajittelun analyysi for(j = 0; j < m; j++) lkm[j] = 0;

    for(i = l; i

Recommended

View more >