Cyfrifiaduron, Rhaglennu
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]
gyfnewid (massiv [i], massiv [i- 1]);
ff ++;
}
}
os (ff == 0) torri;
}
getch (); // oedi arddangos
dychwelyd 0;
}.
Similar articles
Trending Now