TietokoneetOhjelmointi

Lajittelutekniikat ohjelmoinnissa: lajittelu "kupla"

bubble sort ei ole vain pidetään nopein tapa, lisäksi se sulkee luettelon hitain tapoja järjestää. Kuitenkin on etunsa. Täten menetelmä lajittelu kupla - eniten, että kumpikaan on luonteva ja looginen ratkaisu, jos haluat järjestää kohteet tietyssä järjestyksessä. Tavallinen ihminen manuaalisesti, esimerkiksi se käyttää niitä - aivan intuition.

Mistä tällainen epätavallinen nimi?

Menetelmän nimi tuli käyttäen analogiaa ilmakuplia veteen. Se on vertauskuva. Yhtä vähän ilmakuplat nousevat ylöspäin -, koska niiden tiheys on suurempi kuin nesteen (tässä tapauksessa - vesi), ja kunkin ryhmän elementin, sitä pienempi se on arvo, sitä enemmän asteittain huipulle luettelon numerot.

Kuvaus algoritmin

kupla lajitella tapahtuu seuraavasti:

  • ensikierron: elementtien joukko numeroita on ottanut kaksi paria ja myös verrattuna. Jos jotkin kahden miehen joukkue ensimmäinen arvo on suurempi kuin toinen, ohjelma tekee niistä vaihtavat paikkaa;
  • Näin ollen eniten piti loppua jono. Kun taas kaikki muut osat säilyvät ne olivat, hallitsemattomasti, ja vaativat enemmän lajittelu;
  • ja edellyttävät siksi toinen pass: se on valmistettu vastaavasti edellisen (jo kuvattu) ja on muutamia vertailuja - miinus yksi;
  • on kanavan numero kolme vertailua, yksi vähemmän kuin toinen, ja kaksi, kuin ensimmäinen. Ja niin edelleen;
  • yhteenvedon kussakin kanavassa on (kaikki arvot array, tietty määrä) miinus (passage numero) vertailuja.

Lyhyin algoritmi ohjelman voidaan kirjoittaa:

  • joukko numeroita tarkastetaan niin kauan kuin mikä tahansa kaksi numeroa havaitaan, toinen niistä on varmasti suurempi kuin ensimmäinen;
  • väärin sijoitettu suhteessa toisiinsa antenniryhmän elementtien ohjelmisto swap.

Pseudokoodilla perustuu kuvatun algoritmin

Yksinkertaisin toteutus tapahtuu seuraavasti:

Sortirovka_Puzirkom menettely;

alku

syklin j nachalnii_index ja konechii_index;

sykli i välillä nachalnii_index ja konechii_index-1;

jos massiv [i]> massiv [i + 1] (ensimmäinen elementti on suurempi kuin toinen), niin:

(Muutos asettaa arvot);

pää

Tietenkin tämä yksinkertaisuus vain pahentaa tilannetta: yksinkertaisempi algoritmi, sitä enemmän se ilmenee kaikilla puutteita. Investointiaste on liian suuri jopa pieni joukko (tässä tulee suhteellisuusteoria: Aika maallikolle voi tuntua pieneltä, mutta todellisuudessa ohjelmoija joka toinen tai jopa millisekunnin määrä).

Kesti parempaa täytäntöönpanoa. Esimerkiksi ottamalla huomioon vaihto arvojen jono paikoissa:

Sortirovka_Puzirkom menettely;

alku

sortirovka = true;

sykliä, kunnes sortirovka = true;

sortirovka = false;

sykli i välillä nachalnii_index ja konechii_index-1;

jos massiv [i]> massiv [i + 1] (ensimmäinen elementti on suurempi kuin toinen), niin:

(Muuta elementtien paikat);

sortirovka = true; (Havainnut, että vaihto on tehty).

End.

rajoitukset

Suurin haitta - kesto prosessin. Kuinka paljon aikaa suoritetaan Lajittelualgoritmi kupla?

Läpimenoaika lasketaan lukumäärä neliön numerot array - lopputulos on verrannollinen.

Jos pahimmassa tapauksessa taulukko siirretään niin monta kertaa kuin on elementtejä miinus yksi arvo. Näin tapahtuu, koska loppujen lopuksi on vain yksi elementti, jolla ei ole mitään verrata, ja viimeinen läpi array tulee hyödytön toimintaa.

Lisäksi, tehokas menetelmä lajittelu yksinkertainen vaihto, kuten sitä kutsutaan, vain ryhmät pieni koko. Suuria määriä tietoja, joiden avulla prosessi ei toimi: tuloksena on joko virhe tai vika ohjelman.

arvokkuus

kupla sort on erittäin helppo ymmärtää. Opetussuunnitelmiin teknisten yliopistojen tutkimuksen tilaaminen elementtien on lukuisia siirtää ensiksi. Menetelmä on helppo toteuttaa sekä Delphi ohjelmointikieli (L (Delphi), ja C / C ++: (C / C ja plus), uskomattoman yksinkertainen arvot paikantamisalgoritmia oikeassa järjestyksessä ja on Pascal (Pa). Bubble sort sopii aloittelijoille.

Koska haitat algoritmi ei käytetä-ajan tarkoituksiin.

Visuaalinen lajittelu periaate

Ensimmäinen näkymä taulukon 8 22 4 74 44 37 1 7

Vaihe 1 8 22 4 74 44 37 1 7

8 22 4 74 44 1 37 7

8 22 4 74 1 44 37 7

8 22 4 1 74 44 37 7

8 22 1 4 74 44 37 7

8 1 22 4 74 44 37 7

1 8 22 4 74 44 37 7

Vaihe 2 1 8 22 4 74 44 7 37

1 8 22 4 74 7 44 37

1 8 22 4 7 74 44 37

1 8 22 4 7 74 44 37

1 8 4 22 7 74 44 37

1 4 8 22 7 74 44 37

Vaihe 3 1 4 8 22 7 74 37 44

1 4 8 22 7 37 74 44

1 4 8 22 7 37 74 44

1 4 8 7 22 37 74 44

1 4 7 8 22 37 74 44

Vaihe 4 1 4 7 8 22 37 44 74

1 4 7 8 22 37 44 74

1 4 7 8 22 37 44 74

1 4 7 8 22 37 44 74

Vaihe 5 1 4 7 8 22 37 44 74

1 4 7 8 22 37 44 74

1 4 7 8 22 37 44 74

Vaihe 6 1 4 7 8 22 37 44 74

1 4 7 8 22 37 44 74

Vaihe 7 1 4 7 8 22 37 44 74

kupla lajitella esimerkiksi Pascal

esimerkiksi:

const kol_mas = 10;

var massiv: array [1..kol_mas] on kokonaisluku;

a, b, k: kokonaisluku;

alkaa

writeln ( 'input', kol_mas, 'osia array');

varten: = 1 kol_mas tehdä readln (massiv [a ]);

varten: = 1 kol_mas-1 do alkaa

ja b: = a + 1 kol_mas eivät alkaa

jos Massiv [a]> Massiv [ b] sitten alkaa

k: = massiv [a]; massiv [a]: = massiv [ b]; massiv [b]: = k;

end;

end;

end;

writeln ( 'jälkeen eräänlainen');

varten: = 1 kol_mas tehdä writeln (massiv [a ]);

end.

Esimerkki kupla lajittelu C-kielellä (C)

esimerkiksi:

#include

#include

int main (int argc, char * argv [])

{

int massiv [8] = {36, 697, 73, 82, 68, 12, 183, 88}, i, ff;

for (;;) {

ff = 0;

(i = 7, i> 0, i -) {

jos (massiv [i] [i- 1]) {

swap (massiv [i], massiv [i- 1]);

ff ++;

}

}

jos (ff == 0) rikkoa;

}

getch (); // Näytön viive

return 0;

}.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 fi.birmiss.com. Theme powered by WordPress.