[Powered by Google Translate] [Bubble Raða] [JACKSON STEINKAMP Harvard] [ÞETTA ER CS50. CS50TV] Bubble tagi er dæmi um flokkun reiknirit - það er aðferð til að flokka safn af þáttum í hækkandi eða lækkandi röð. Til dæmis, ef þú vildir að raða fylki sem samanstendur af fjölda [3, 5, 2, 9], rétta framkvæmd Raða Bubble myndi skila raðað array [2, 3, 5, 9] í hækkandi röð. Nú ætla ég að útskýra í sauðakóðanum hvernig reiknirit virkar. Við skulum segja að við erum að flokka lista yfir 5 heiltölur - 3, 2, 9, 6, og 5. Reiknirit hefst með því að horfa á fyrstu tvo þætti, 3 og 2, og athuga hvort þeir eru út af röð miðað við hvert annað. Þeir eru - 3 um meira en 2. Til að vera í hækkandi röð, ættu þeir að vera á hinn veginn. Svo skipta við þá. Nú lítur listinn svona út: [2, 3, 9, 6, 5]. Næst skaltu líta við á öðrum og þriðja þætti, 3 og 9. Þeir eru í réttri röð miðað við hvert annað. Það er, 3 er minna en 9 þannig að reiknirit ekki skipta þeim. Næst skaltu líta við á 9 og 6. Þeir eru út af röð. Svo þurfum við að skipta á þeim vegna þess að 9 er meiri en 6. Loksins, horfum við á síðustu tvær heiltölur, 9 og 5. Þeir eru út af röð, svo þeir verða að vera skipti. Eftir fyrsta heila umferð í gegnum listann, það lítur svona út: [2, 3, 6, 5, 9]. Ekki slæmt. Það er nánast raðað. En við þurfum að keyra í gegnum listann aftur til að fá það raðað alveg. Two er minna en 3, svo að við skipta þeim ekki. Þrír er minna en 6, svo að við skipta þeim ekki. Sex er meiri en 5. Við skipti. Sex er minna en 9. Við skipti ekki. Eftir að seinni umferð í gegnum, það útlit eins og this: [2, 3, 5, 6, 9]. Perfect. Nú, við skulum skrifa það í sauðakóðanum. Í grundvallaratriðum, fyrir hvert frumefni á listanum, þurfum við að líta á það og þáttur beint að sér. Ef þeir eru út af röð miðað við hvert annað - það er, ef þátturinn á vinstri er meiri en einn á rétt - við ættum að skipta um tvo hluti. Við gerum þetta fyrir hvert frumefni á listanum, og við höfum gert einn fara í gegnum. Nú verðum við bara að gera framhjá-í gegnum nógu oft til að tryggja lista er fullkomlega, rétt raðað. En hversu oft eigum við að fara í gegnum listann til tryggja að við erum að gera? Jæja, versta er ef við höfum alveg aftur á bak lista. Þá tekur það fjölda líða throughs jafn fjölda af þætti N-1. Ef þetta er ekki skynsamleg innsær, hugsa um einfalt mál - listi [2, 1]. Þetta er að fara að taka einn fara í gegnum til að raða rétt. [3, 2, 1] - Í versta falli er þessi með 3 þáttum raðað aftur, það er að fara að taka 2 endurtekningar til að flokka. Eftir einn endurtekning, það er [2, 1, 3]. Annað fæst raðað array [1, 2, 3]. Svo þú veist að þú aldrei þurft að fara í gegnum fjölda, almennt, meira en n-1 sinnum, þar sem n er fjöldi staka í fylkinu. Það heitir Bubble Raða vegna stærstu þættir hafa tilhneigingu til að "kúla-upp ' til hægri frekar hratt. Í raun, þetta reiknirit er mjög áhugavert hegðun. Eftir m endurtekningar gegnum allt fylki, á rightmost m þættir eru tryggð að vera flokkaður í rétta stað þeirra. Ef þú vilt sjá þetta fyrir sjálfan þig, við getum reynt það á alveg afturábak lista [9, 6, 5, 3, 2]. Eftir eina umferð um allan listann, [Hljóð skrifa] [6, 9, 5, 3, 2], [6, 5, 9, 3, 2], [6, 5, 3, 9, 2], [6, 5, 3, 2, 9] á rightmost þáttur 9 er í rétta stað. Eftir seinni framhjá-í gegnum, að 6 verður "bubbled upp 'til annað rightmost stað. Þeir tveir þættir á hægri - 6 og 9 - mun vera í réttum stöðum sínum eftir fyrstu tveimur framhjá throughs. Svo, hvernig getum við notað þetta til að hámarka reiknirit? Jæja, eftir einn endurtekning gegnum fylki við gerum ekki raunverulega þörf til að athuga rightmost þáttur vegna þess að við vitum að það er flokkað. Eftir tvær endurtekningar, vitum við að tryggja að rightmost tveir þættir eru á sínum stað. Svo almennt, eftir endurtekningar k með fullri array, haka við síðustu þætti K er óþarfi þar sem við vitum þeir eru á réttan stað þegar. Svo ef þú ert að flokka fjölda n þáttum, á fyrsta endurtekning - you'll að raða öllum þeim þáttum - fyrstu n-0. Á seinni endurtekning, þarftu að líta á alla þá þætti, en síðasta - fyrsta N-1. Annar hagræðingu gæti verið að athuga hvort listinn er þegar raðað eftir hverja ítrun. Ef það er þegar raðað, þurfum við ekki að gera eitthvað meira endurtekningar gegnum listann. Hvernig getum við gert þetta? Jæja, ef við ekki gera neinar skiptasamninga á að fara í gegnum á listanum, það er ljóst að listinn var þegar raðað vegna þess að við ekki skipta neitt. Þannig að við örugglega ekki að raða aftur. Kannski þú gætir frumstilla fána breytu sem heitir "ekki raðað 'til falskar og breyta því að sanna ef þú ert að skipta á þætti á einn endurtekning gegnum fylki. Eða álíka, gera teljara til að telja hversu margir samningar sem þú gerir á hverjum endurtekning. Í lok sem endurtekning, ef þú did ekki skipta einhverju af þeim þáttum, þú veist að listinn er nú þegar raðað og þú ert búinn. Bubble Raða, eins og önnur reiknirit flokkun, er hægt að klip til að vinna fyrir öllum þáttum sem geta haft röðun aðferð. Það er gefið tveimur þáttum þú hafa a vegur til segja ef fyrsta er stærra en, jafnt eða minna en sekúndu. Til dæmis, getur þú flokkað bókstafina með því að segja að a