Tip:
Highlight text to annotate it
X
[Powered by Google Translate] [BUBBLE SORT]
[JACKSON Steinkamp HARVARD UNIVERSITY]
[AIXÒ ÉS CS50. CS50TV]
Ordenar bombolla és un exemple d'un algorisme de classificació -
és a dir, un procediment per a la classificació d'un conjunt d'elements en
ascendent o descendent.
Per exemple, si voleu ordenar una matriu que consisteix en els números
[3, 5, 2, 9], una implementació correcta de Bubble Sort tornaria el
matriu ordenada [2, 3, 5, 9], en ordre ascendent.
Ara, vaig a explicar en pseudocodi com funciona l'algorisme.
>> Diguem que estem ordenar una llista de 5 nombres enters - 3, 2, 9, 6 i 5.
L'algorisme s'observa, en els dos primers elements, 3 i 2,
i comprovar si estan fora d'ordre un respecte a l'altre.
Ells són - 3 és més gran que 2.
Per estar en ordre ascendent, que ha de ser a l'inrevés.
Així que intercanviar-les.
Ara la llista és la següent: [2, 3, 9, 6, 5].
>> A continuació, ens fixem en els elements segon i tercer, 3 i 9.
Estan en l'ordre correcte amb relació a una altra.
És a dir, 3 és menor que 9 de manera que l'algorisme no intercanviar.
A continuació, veiem a les 9 i 6. Estan fora d'ordre.
>> Per tant, hem de canviar perquè 9 és major que 6.
Finalment, ens fixem en els últims dos nombres enters, 9 i 5.
Estan fora de servei, de manera que ha de ser canviat.
Després de la primera passada completa a través de la llista,
es veu així: [2, 3, 6, 5, 9].
No està malament. És gairebé ordenats.
Però hem de repassar la llista de nou per aconseguir totalment ordenats.
Dos és menor que 3, pel que no intercanviar-les.
>> Tres és inferior a 6, pel que no intercanviar-les.
Sis és major que 5. Ens canviat.
Sis és menor que 9. No intercanviar.
Després de la segona passada a través, que es veu així: [2, 3, 5, 6, 9]. Perfecte.
Ara, anem a escriure en pseudocodi.
Bàsicament, per a cada element de la llista, hem de mirar
i l'element directament a la seva dreta.
Si estan fora d'ordre amb relació a una altra - és a dir, si l'element de l'esquerra
és més gran que el de la dreta - que han de bescanviar els dos elements.
>> Fem això per a cada element de la llista, i hem fet un pas endavant.
Ara només hem de veure els temps de pas a través suficients per garantir la llista
està completament, correctament ordenats.
Però quantes vegades hem de passar per la llista per
garantir que hem acabat?
Doncs bé, el pitjor escenari és que si tenim una llista completament a l'inrevés.
Després es pren una sèrie de passar-throughs igual al nombre
elements de n-1.
Si això no té sentit intuïtivament, pensar en un cas senzill - la llista [2, 1].
>> Això prendrà un pas a través d'ordenar correctament.
[3, 2, 1] - El pitjor cas és que amb 3 elements ordenats cap enrere,
que va a prendre 2 iteracions per ordenar.
Després d'una iteració, és [2, 1, 3].
Els rendiments segons la matriu ordenada [1, 2, 3].
Així que ja saps que mai hagi d'anar a través de la matriu, en general,
més de n-1 vegades, on n és el nombre d'elements en la matriu.
Es diu Bubble Sort perquè els elements més grans tendeixen a "bombolla-up '
a la dreta amb força rapidesa.
De fet, aquest algorisme té un comportament molt interessant.
>> Després de m iteracions a través de tota la matriu,
el de la dreta m elements estan garantits
per ser ordenats en el seu lloc correcte.
Si vols veure això per tu mateix,
podem provar-ho en una llista completament a l'inrevés [9, 6, 5, 3, 2].
Després d'una passada a través de tota la llista,
[So de l'escriptura]
[6, 9, 5, 3, 2], [6, 5, 9, 3, 2], [6, 5, 3, 9, 2], [6, 5, 3, 2, 9]
l'element més a la dreta 9 està en el seu lloc apropiat.
Després de la segona transferència, el 6 tindrà 'bombolleja cap amunt "a la
lloc més a la dreta segon.
Els dos elements de la dreta - 6 i 9 - estaran en els seus llocs correctes
després dels dos primers passades-through.
>> Així que, com podem usar això per optimitzar l'algorisme?
Bé, després d'una iteració a través de la matriu
que en realitat no necessita comprovar l'element més a la dreta
perquè sabem que està ordenada.
Després de dues iteracions, sabem del cert el de la dreta dos elements estan en el seu lloc.
Així que, en general, després de k iteracions a través de tota la gamma,
la comprovació dels elements k últims és redundant, ja que sabem
que estan en el lloc correcte ja.
>> Així que si estàs ordenar un arranjament de n elements,
a la primera iteració - vostè ha de classificar tots els elements - la primera n-0.
A la segona iteració, vostè ha de mirar tots els elements excepte l'últim -
la primera n-1.
Una altra optimització podria ser la de comprovar si la llista ja està ordenada
després de cada iteració.
Si ja està classificat, no cal fer més iteracions qualsevol
a través de la llista.
Com podem fer això?
Bé, si no fem cap swaps en un pas a través de la llista,
és clar que la llista s'ordenen ja perquè no canviar res.
Així que definitivament no ha d'ordenar de nou.
>> Potser vostè podria inicialitzar una variable d'indicador anomenat "Sense ordenar 'a
false i canviar a true vostè ha de canviar algun element de
una iteració a través de la matriu.
O igualment, fer un comptador per comptar el nombre d'intercanvis que hagi realitzat
en qualsevol iteració donada.
Al final d'una iteració, sinó canviar qualsevol dels elements,
Coneix la llista ja està ordenada i ja està.
Bubble Sort, igual que altres algoritmes d'ordenació, pot ser
ajustat per treballar per tots els elements que tenen el tipus d'ordre.
>> És a dir, donats dos elements que tenen una manera de dir si la primera
és més gran que, igual a, o menor que el segon.
Per exemple, pot ordenar les lletres de l'alfabet dient
que a Ordenar bombolla és de cap manera un algoritme de classificació molt eficient o ràpida.
El seu pitjor temps d'execució és de Big O ² n
perquè cal fer n iteracions a través d'una llista
la comprovació de tots els elements del núm cada transferència, nxn = n ².
Això vol dir que el temps d'execució com el nombre d'elements que estiguis classificació augmenta,
el temps d'execució augmenta cuadráticamente.
>> Però si l'eficiència no és una preocupació important del seu programa
o si només ordenar un petit nombre d'elements,
és possible que trobi Bubble Sort útil perquè
que és un dels més senzills algorismes d'ordenació d'entendre
i per codificar.
També és una gran manera d'aconseguir experiència en la traducció d'una part teòrica
algoritme en codi de funcionament real.
Bé, això és Bubble Sort per a vostè. Gràcies per la seva atenció.
CS50.TV