Komputiloj, Programado
Ordigado teknikoj en programado: ordigado "bobelo"
bobelo varo estas ne nur konsiderata la plej rapida metodo, cetere, ĝi fermas la listo de la plej malrapida manieroj organizi. Tamen, ĝi havas liajn avantaĝojn. Tiel, la metodo de ordiga bobelo - la plej ke nek estas natura kaj logika solvo al la problemo, se vi volas aranĝi la erojn en specifa ordo. Ordinara persono permane, ekzemple, ĝi uzas ilin - nur intuicio.
Kie faris tian nekutiman nomon?
Metodo nomo venis supren, uzante la analogio de bobeloj de aero en la akvon. Ĝi estas metaforo. Kiel malgranda aero bobeloj leviĝi supren - ĉar ilia denseco estas pli granda ol fluida (en tiu kazo - la akvo), kaj ĉiu tabelo elemento, la pli malgranda estas la valoro, des pli laŭgrada maniero al la supro de la listo nombroj.
Priskribo de la algoritmo
bobelo varo estas farata tiel:
- unua pasejo: la elementoj de la tabelo nombroj estas prenita de la du paroj kaj ankaŭ kompari. Se iuj elementoj de la du viroj teamo unua valoro estas pli granda ol la dua, la programo igas ilin interŝanĝo lokoj;
- konsekvence, la plej granda nombro de misses la fino de la tabelo. Dum ĉiuj aliaj elementoj restas kiel estis, en ĥaosa maniero, kaj postulas pli ordigado;
- kaj tial postulas duan pasejo: ĝi estas farita per analogio kun la antaŭa (jam priskribita) kaj havas kelkajn komparojn - minus unu;
- ĉe pasejo numeron tri komparoj, unu malpli ol la dua, kaj la du, ol la unua. Kaj tiel plu;
- resumi ke ĉiu paŝo havas (ĉiuj valoroj en la tabelo, la aparta nombro) minus (pasejo nombro) komparoj.
Eĉ pli mallonga algoritmo de programo povas esti skribita kiel:
- tabelo de nombroj estas markita, dum ĉiuj du nombroj estas trovita, la dua de ili estas ligita esti pli granda ol la unua;
- neregulan pozicion rilate al la alia elementoj de la tabelo programaro svopoj.
_pseudocode_ bazita sur la algoritmo priskribita
La plej simpla efektivigo efektivigas tiel:
Sortirovka_Puzirkom procedo;
komenco
ciklo por j el nachalnii_index al konechii_index;
ciklo por i de nachalnii_index al konechii_index-1;
se massiv [i]> massiv [i + 1] (unua elemento pli granda ol la dua), tiam:
(Ŝanĝo metas valoroj);
fino
Kompreneble, ĉi tiu simpleco nur pligravigas la situacion: la pli simpla la algoritmo, des pli ĝi manifestiĝas ĉiujn difektojn. Investo rilatumo de tempo estas tro granda eĉ por malgranda array (jen en relativeco: La kvanto de tempo por la laiko eble ŝajnas malgranda, sed fakte programisto ĉiun duan aŭ eĉ milisegundo grafoj).
Ĝi prenis la pli bona efektivigo. Ekzemple, konsiderante la interŝanĝo de valoroj vicojn lokoj:
Sortirovka_Puzirkom procedo;
komenco
sortirovka = vera;
ciklo ĝis sortirovka = vera;
sortirovka = malvera;
ciklo por i de nachalnii_index al konechii_index-1;
se massiv [i]> massiv [i + 1] (unua elemento pli granda ol la dua), tiam:
(Ŝanĝi elementojn lokoj);
sortirovka = vera; (Identigita ke la interŝanĝo estas farita).
Fino.
limigoj
La ĉefa malavantaĝo - la daŭro de la procezo. Kiom da tempo estas farata ordiga algoritmo bobelo?
Plumbo tempo estas kalkulita de la nombro de kvadrataj nombroj en la tabelo - la fina rezulto de tio estas proporcia.
Se la plej malbona kazo la tabelo estas pasita kiel multaj tempoj kiel ĝi havas elementojn minus unu valoro. Ĉi tio okazas ĉar en la fino estas nur unu elemento, kiu havas nenion por kompari, kaj la lasta paŝo tra la tabelo iĝas senutila agado.
Krome, efika metodo de ordiga simpla interŝanĝo, kiel oni nomas, nur por tabeloj de malgranda grandeco. Grandaj kvantoj de datumoj kun la helpo de procezo ne funkcios: la rezulto estos aŭ eraro aŭ fiasko de la programo.
digno
bobelo varo estas tre facile komprenebla. La instruplanoj de teknikaj universitatoj en la studo de la ordenamiento elementoj de lia tabelo En la unua loko. La metodo estas facila de implementar kaj la Delfos programlingvo (L (Delphi), kaj la C / C ++ (C / C plus plus), nekredeble simpla valoroj de loko algoritmo en la ĝusta ordo kaj en la Paskalo (Pascal). Bobelo speco estas ideala por komencantoj.
Pro la malavantaĝojn de la algoritmo ne estas uzata en extracurriculares celoj.
Vida ordigado principo
La komenca vido de la tabelo 8 22 4 74 44 37 1 7
Paŝo 8 22 4 1 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
Paŝo 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
Paŝo 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
Paŝo 1 4 7 4 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
Paŝo 1 4 7 5 8 22 37 44 74
1 4 7 8 22 37 44 74
1 4 7 8 22 37 44 74
Paŝo 1 4 7 6 8 22 37 44 74
1 4 7 8 22 37 44 74
Paŝo 1 4 7 7 8 22 37 44 74
bobelo speco ekzemplo en Pascal
ekzemple:
const kol_mas = 10;
var massiv: tabelo [1..kol_mas] de entjero;
a, b, k: entjera;
komenci
writeln ( 'enigo', kol_mas, 'elementoj de tabelo');
por: = 1 por kol_mas fari readln (massiv [a ]);
por: = 1 por kol_mas-1 do komenci
por b: = a + 1 por kol_mas ja komenci
se massiv [a]> massiv [ b] tiam komenci
k: = massiv [a]; massiv [a]: = massiv [ b]; massiv [b]: = k;
fini;
fini;
fini;
writeln ( 'post speco');
por: = 1 por kol_mas fari writeln (massiv [a ]);
fino.
EKZEMPLO bobelo ordigado en C lingvo (C)
ekzemple:
#include
#include
int main (int argc, char * argv [])
{
int massiv [8] = {36, 697, 73, 82, 68, 12, 183, 88}, i, ff;
por (;;) {
ff = 0;
por (i = 7; i> 0; i -) {
se (massiv [i]
swap (massiv [i], massiv [I- 1]);
ff ++;
}
}
se (ff == 0) rompos;
}
getch (); // display prokrasto
revenu 0;
}.
Similar articles
Trending Now