CyfrifiaduronRhaglennu

Technegau mewn rhaglenni didoli: didoli "swigen"

nid yn unig yn ystyried yn fath swigen i fod y dull cyflymaf, ar ben hynny, yn cau y rhestr o'r ffyrdd mwyaf araf i drefnu. Fodd bynnag, mae wedi ei fanteision. Felly, y dull o ddidoli swigen - y mwyaf nad oedd yn ateb naturiol a rhesymegol i'r broblem, os ydych am i drefnu'r eitemau mewn trefn benodol. Mae person cyffredin â llaw, er enghraifft, bydd yn eu defnyddio - dim ond drwy greddf.

Ble wnaeth enw mor anarferol?

Enw'r Dull ddaeth i fyny, gan ddefnyddio gyfatebiaeth o swigod aer yn y dŵr. Mae'n trosiad. Yn union fel swigod bach o gynnydd awyr i'r top - oherwydd bod eu dwysedd yn fwy nag unrhyw hylif (yn yr achos hwn - y dŵr), a phob elfen o'r array, y lleiaf ei fod yn y gwerth, y ffordd yn fwy graddol i frig y rhestr o rifau.

Disgrifiad o'r algorithm

fath swigen yn perfformio fel a ganlyn:

  • pas cyntaf: elfennau'r rhifau arae yn cael ei gymryd gan y ddau bâr a cymharu hefyd. Os yw rhai elfennau o'r ddau ddyn gwerth cyntaf tîm yn fwy na'r ail, mae'r rhaglen yn gwneud lleoedd gyfnewid iddynt;
  • o ganlyniad, mae'r nifer fwyaf o colli diwedd y rhesi. Er bod yr holl elfennau eraill yn aros fel yr oeddent, mewn dull di-drefn, ac mae angen mwy didoli;
  • ac felly yn ei gwneud yn ofynnol ail pas: mae'n cael ei wneud trwy gydweddiad â blaenorol (a ddisgrifiwyd eisoes) ac mae ganddo nifer o gymariaethau - minws un;
  • yn rhif cyntedd tair cymariaethau, un yn llai na'r ail, a'r ddau, na'r cyntaf. Ac yn y blaen;
  • crynhoi bod pob darn wedi (pob gwerth yn y array, mae nifer penodol) minws (rhif dreigl) cymariaethau.

Gall hyd yn oed yn algorithm byrrach o raglen yn cael ei ysgrifennu fel:

  • amrywiaeth o rifau yn cael ei wirio cyn belled â bod unrhyw ddau rif yn cael eu gweld, yr ail ohonynt yn sicr o fod yn fwy na'r cyntaf;
  • lleoli'n anghywir mewn perthynas â phob elfennau eraill y cyfnewidiadau meddalwedd arae.

Pseudocode yn seiliedig ar yr algorithm a ddisgrifiwyd

Mae gweithredu symlaf yn cael ei wneud fel a ganlyn:

gweithdrefn Sortirovka_Puzirkom;

gan ddechrau

beicio ar gyfer j o nachalnii_index i konechii_index;

beicio ar gyfer i rhag nachalnii_index i konechii_index-1;

os massiv [i]> massiv [i + 1] (elfen gyntaf yn fwy nag eiliad), yna:

(Newid yn gosod gwerthoedd);

diwedd

Wrth gwrs, symlrwydd hwn ond yn gwaethygu sefyllfa: symlaf y algorithm, y mwyaf y mae'n amlygu holl ddiffygion. cymhareb buddsoddi amser yn rhy fawr hyd yn oed am amrywiaeth bach (yma hon mewn perthynoledd: Efallai y bydd y swm o amser ar gyfer y lleygwr ymddangos yn fach, ond mewn gwirionedd yn rhaglennydd bob eiliad neu hyd yn oed millisecond cyfrif).

Cymerodd y gorau ar waith. Er enghraifft, gan gymryd i ystyriaeth y cyfnewid o werthoedd mewn lleoliadau arae:

gweithdrefn Sortirovka_Puzirkom;

gan ddechrau

sortirovka = wir;

beicio nes sortirovka = wir;

sortirovka = ffug;

beicio ar gyfer i rhag nachalnii_index i konechii_index-1;

os massiv [i]> massiv [i + 1] (elfen gyntaf yn fwy nag eiliad), yna:

(Newid lle elfennau);

sortirovka = wir; (Nodwyd bod y cyfnewid wedi cael ei wneud).

End.

cyfyngiadau

Y brif anfantais - hyd y broses. Faint o amser yn cael ei berfformio didoli algorithm swigen?

amser arweiniol yn cael ei gyfrifo o'r nifer o rifau sgwâr yn y arae - y canlyniad diwedd ei fod yn gyfrannol.

Os bydd yr achos gwaethaf yr amrywiaeth yn cael ei basio gymaint o weithiau ag y mae ganddo elfennau llai un gwerth. Mae hyn yn digwydd oherwydd yn y diwedd dim ond un elfen, sydd ddim i'w gymharu, ac mae'r tocyn olaf drwy'r amrywiaeth yn dod yn weithred ddiwerth.

Yn ogystal, mae dull effeithiol o ddatrys cyfnewid syml, fel y'i gelwir, dim ond ar gyfer araeau o faint bach. Ni fydd llawer iawn o ddata gyda chymorth broses yn gweithio: y canlyniad fydd naill ai camgymeriad neu fethiant y rhaglen.

urddas

fath swigen yn hawdd iawn i'w ddeall. Mae cwricwla o brifysgolion technegol yn yr astudiaeth o elfennau archebu ei arae pasio yn y lle cyntaf. Mae'r dull hwn yn hawdd i'w gweithredu yn yr iaith Delphi raglennu (L (Delphi), a'r C / C ++ (C / C plws plus), mae gwerthoedd hynod syml o algorithm lleoliad yn y drefn gywir ac ar yr Pascal (Pascal). Didoli Bubble yn ddelfrydol ar gyfer dechreuwyr.

Oherwydd y anfanteision y algorithm yn cael ei ddefnyddio mewn ddibenion allgyrsiol.

egwyddor didoli Gweledol

Y farn gychwynnol y rhesi 22 4 8 74 44 37 1 7

Cam 8 22 1 4 74 44 37 1 7

8 22 4 74 44 1 37 7

22 4 8 74 1 44 37 7

8 22 4 1 74 44 37 7

22 1 8 4 74 44 37 7

1 22 8 4 74 44 37 7

8 22 1 4 74 44 37 7

Cam 2 1 8 22 4 74 44 7 37

8 22 1 4 74 7 44 37

8 22 1 4 7 74 44 37

8 22 1 4 7 74 44 37

8 4 1 22 7 74 44 37

4 8 1 22 7 74 44 37

Cam 3 1 4 8 22 7 74 37 44

4 8 1 22 7 37 74 44

4 8 1 22 7 37 74 44

4 8 1 7 22 37 74 44

4 7 1 8 22 37 74 44

Cam 1 4 4 7 8 22 37 44 74

4 7 1 8 22 37 44 74

4 7 1 8 22 37 44 74

4 7 1 8 22 37 44 74

Cam 1 4 5 7 8 22 37 44 74

4 7 1 8 22 37 44 74

4 7 1 8 22 37 44 74

Cam 1 4 6 7 8 22 37 44 74

4 7 1 8 22 37 44 74

Cam 1 4 7 7 8 22 37 44 74

swigen Enghraifft fath yn Pascal

enghraifft:

kol_mas Etholaeth = 10;

var massiv: array [1..kol_mas] o gyfanrif;

a, b, k: cyfanrif;

dechrau

writeln ( 'mewnbwn', kol_mas, 'elfennau o array');

am: = 1 i kol_mas wneud readln (massiv [a ]);

am: = 1 i kol_mas-1 yn dechrau

am b: = a + 1 i kol_mas yn dechrau

os massiv [a]> massiv [ b] yna yn dechrau

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

ben;

ben;

ben;

writeln ( 'ar ôl didoli');

am: = 1 i kol_mas wneud writeln (massiv [a ]);

diwedd.

swigen ENGHREIFFTIOL didoli mewn iaith C (C)

enghraifft:

#include

#include

int brif (int argc, torgoch * argv [])

{

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

am (;;) {

ff = 0;

ar gyfer (i = 7; i> 0: i -) {

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

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

ff ++;

}

}

os (ff == 0) torri;

}

getch (); // oedi arddangos

dychwelyd 0;

}.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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