[Powered by Google Translate] [BUBBLE SORT]
[JACKSON STEINKAMP Hārvarda universitāte]
[Tas ir CS50. CS50TV]
Burbulis Šķirot ir piemērs šķirošanas algoritmu -
tas ir, procedūra šķirošanas kompleksu elementu pastāvēšanu
augošā vai dilstošā secībā.
Piemēram, ja jūs vēlaties, lai sakārtotu masīvu, kas sastāv no numuriem
[3, 5, 2, 9], pareiza īstenošana Bubble Kārtot varētu atgriezties
sakārtoti masīvs [2, 3, 5, 9] augošā secībā.
Tagad es esmu gatavojas izskaidrot pseudocode kā algoritms darbojas.
>> Pieņemsim, ka mēs esam šķirošanas sarakstu no 5 integers - 3, 2, 9, 6, 5 un.
Algoritms sākas, aplūkojot pirmajiem diviem elementiem, 3 un 2,
un pārbaudīt, ja viņi no rīkojuma attiecībā pret otru.
Tie ir - 3 ir lielāks par 2.
Lai būtu augošā secībā, tiem vajadzētu būt otrādi.
Tātad, mēs mijmaiņas tiem.
Tagad saraksts izskatās šādi: [2, 3, 9, 6, 5].
>> Tālāk, mēs skatāmies uz otro un trešo elementu, 3 un 9.
Viņi pareizā secībā attiecībā pret otru.
Tas ir, 3 ir mazāks par 9 tāpēc algoritms nav mijmaiņas tiem.
Tālāk, mēs skatāmies pēc 9 un 6. Viņi no pasūtījuma.
>> Tātad, mums ir nepieciešams, lai mijmaiņas tiem, jo ​​9 ir lielāks par 6.
Visbeidzot, mēs skatāmies pēdējos divos integers, 9 un 5.
Viņi iziet no ierindas, tāpēc tie ir samainīti.
Pēc pirmās pilnās iziet cauri sarakstam,
tas izskatās šādi: [2, 3, 6, 5, 9].
Nav slikti. Tas ir gandrīz sakārtoti.
Bet mums ir nepieciešams, lai palaistu cauri sarakstam vēlreiz, lai saņemtu to pilnībā sakārtots.
Divi ir mazāks par 3, tāpēc mums nav mijmaiņas tiem.
>> Trīs ir mazāks par 6, tāpēc mums nav mijmaiņas tiem.
Seši ir lielāks par 5. Mēs nomainīju.
Seši ir mazāks par 9. Mums nav swap.
Pēc otrā iziet cauri, tas izskatās šādi: [2, 3, 5, 6, 9]. Perfekta.
Tagad, pieņemsim uzrakstiet to pseudocode.
Būtībā, katram elementam sarakstā, mums ir jāskatās uz to
un elementa tieši tās tiesībām.
Ja tie nav pareizā secībā attiecībā pret otru - tas ir, ja elements pa kreisi
ir lielāks nekā tas, pa labi - mums vajadzētu mijmaiņas diviem elementiem.
>> Mēs to darām, lai katru elementu sarakstu, un mēs esam padarījuši vienu iet cauri.
Tagad mums vienkārši ir jādara transmisija pietiekami laikus, lai nodrošinātu sarakstu
ir pilnībā, pareizi sakārtots.
Bet cik reizes mums ir iziet cauri sarakstam, lai
garantēt, ka mēs esam darījuši?
Nu, sliktākajā gadījumā ir, ja mums ir pilnīgi atpakaļsaderību sarakstu.
Tad tas aizņem vairākus iet pievadiem vienāds skaits
elementu n-1.
Ja tas nav jēgas intuitīvi, domā par vienkāršu lietu - sarakstu [2, 1].
>> Tas ir gatavojas veikt vienu transmisija sakārtot pareizi.
[3, 2, 1] - Sliktākajā gadījumā ir tas, ka ar 3 elementiem sakārtoti atpakaļ,
tas gatavojas veikt 2 atkārtojumiem kārtošanai.
Pēc viena atkārtojuma, tā [2, 1, 3].
Otrais ražas sakārtoti masīvs [1, 2, 3].
Tātad, jūs zināt, jums nekad nav iet caur masīvs, kopumā
vairāk nekā n-1 reizes, kur n ir elementu skaits masīvā.
To sauc burbulis Sakārtot jo lielākie elementi mēdz "burbulis-up"
uz labo diezgan ātri.
Patiesībā, šis algoritms ir ļoti interesants uzvedību.
>> Pēc m atkārtojumiem cauri visai masīvs,
rightmost m elementi ir garantēta
sakārtoti savā pareizajā vietā.
Ja jūs vēlaties redzēt šo par sevi,
mēs varam mēģināt to par pilnīgi atpakaļsaderību sarakstā [9, 6, 5, 3, 2].
Pēc viena iet caur visam sarakstam,
[Skaņu rakstīšanas]
[6, 9, 5, 3, 2], [6, 5, 9, 3, 2], [6, 5, 3, 9, 2], [6, 5, 3, 2, 9]
rightmost elements 9 ir tās pienācīgu vietu.
Pēc otrā transmisija, 6 būs "burbuļo-up" uz
2. rightmost vieta.
Divi elementi pa labi - 6 un 9 - būs savās pareizajās vietās
Pēc pirmo divu pass pievadiem.
>> Tātad, kā mēs varam izmantot, lai optimizētu šo algoritmu?
Nu, pēc viena atkārtojuma caur masīvs
mums nav tiešām ir nepieciešams, lai pārbaudītu rightmost elements
jo mēs zinām, tas ir sakārtoti.
Pēc diviem atkārtojumiem, mēs zinām droši rightmost divi elementi ir savā vietā.
Tātad, kopumā, pēc k iterācijām caur pilnu klāstu,
Pārbaudot pēdējo k elementiem ir lieks, jo mēs zinām,
viņi ir pareizajā vietā jau.
>> Tātad, ja jūs esat šķirošanu masīvs n elementiem,
gada pirmā atkārtojuma - you'll ir kārtot visus elementus - pirmā N-0.
Gada otrajam atkārtojumam, jums ir apskatīt visus elementus, bet pēdējo -
pirmais N-1.
Vēl optimizācija varētu pārbaudīt, ja saraksts jau ir sakārtots
Pēc katras iterācijas.
Ja tas jau ir sakārtoti, mums nav nepieciešams veikt vairāk iterācijas
pa sarakstu.
Kā mēs varam darīt?
Nu, ja mums nav nekādas mijmaiņa uz transmisija saraksta,
tas ir skaidrs, ka saraksts jau tika sakārtots, jo mums nav mijmaiņas neko.
Tāpēc mēs noteikti nav šķirot vēlreiz.
>> Varbūt jūs varētu inicializēt karoga mainīgo sauc "nav sakārtoti", lai
nepatiess un mainīt to, ja jums ir, lai mijmaiņas kādi elementus
viena atkārtojuma caur masīvs.
Vai līdzīgi, lai skaitītājs cik mijmaiņas jūs veicat
jebkurā konkrētā atkārtojuma.
Pēc atkārtošanu, ja Jums nav mijmaiņas jebkuru no elementiem,
Jūs zināt saraksts jau ir sakārtots, un jūs darīts.
Burbulis Kārtot, tāpat kā citi kārtošanas algoritmi, var būt
tweaked strādāt visiem elementiem, kuriem ir pasūtīšanas metodi.
>> Tas ir, ņemot vērā divi elementi jums ir veids, kā pateikt, ja pirmais
ir lielāks nekā, vienāda vai mazāka nekā otrajā.
Piemēram, jūs varētu kārtot alfabēta burti, sakot
ka <b, b <c, utt
Vai jūs varētu sakārtot nedēļas dienas, kurās ir svētdiena mazāk nekā pirmdiena
kas ir mazāk nekā otrdien.
>> Burbulis Šķirot nekādā ziņā ļoti efektīvu vai ātri šķirošanas algoritmu.
Vissliktākajā gadījumā izpildlaika ir Big O n ²
jo jums ir, lai n iterācijas izmantojot sarakstu
pārbaudot visus n elementus katru transmisija, nxn = n ².
Tas palaist laiks nozīmē, ka par vairākiem elementiem jūs šķirošana pieaugumu,
darbības laiks palielinās quadratically.
>> Bet, ja efektivitāte nav lielas bažas par savu programmu
vai, ja jūs tikai šķirošanas nelielu skaitu elementu,
Jūs varētu atrast burbulis Sakārtot noderīgi, jo
tas ir viens no vienkāršākajiem šķirošanas algoritmu, lai saprastu
un kods.
Tas ir arī lielisks veids, kā iegūt pieredzi ar tulkošanu teorētisks
Algoritms vērā faktisko funkcionējošu kodu.
Nu, tas ir burbulis Sakārtot jums. Paldies par skatoties.
CS50.TV