[Powered by Google Translate] [БУББЛЕ СОРТ]
[ЈАЦКСОН СТЕИНКАМП Универзитет Харвард]
[Ово је ЦС50. ЦС50ТВ]
Буббле Сортирај је пример сортирање алгоритмом -
то јест, поступак за сортирање низа елемената у
растућем или опадајућем редоследу.
На пример, ако сте желели да сортирате низ састоји од бројева
[3, 5, 2, 9], коректна имплементација Буббле Сортирај би да врати
сортирају низ [2, 3, 5, 9] у растућем редоследу.
Сада ћу да објасним у Псеудокод како алгоритам ради.
>> Рецимо да смо сортирање листу од 5 бројева - 3, 2, 9, 6 и 5.
Алгоритам почиње гледајући прва два елемента, 3 и 2,
и провере да ли су они из реда у односу на другог.
Они су - 3 је већа од 2.
Да буде у растућем редоследу, они би требало да буде обрнуто.
Дакле, ми смо их замене.
Сада је списак изгледа овако: [2, 3, 9, 6, 5].
>> Даље, гледамо друге и треће елемената, 3 и 9.
Они су у исправном редоследу у односу на другог.
То је, 3 је мање од 9 па алгоритам их не замене.
Даље, ми гледамо у 9 и 6. Они су у квару.
>> Дакле, морамо да их замене јер 9 је већи од 6 година.
На крају, ми погледамо последња два цела броја, 9 и 5.
Они су у реду, тако да они морају бити замењени.
После првог комплетног пролазе кроз листе,
изгледа овако: [2, 3, 6, 5, 9].
Није лоше. То је скоро сортирају.
Али ми треба да пролазе кроз листу да бисте добили потпуно сортирају.
Два мања од 3, тако да их не замене.
>> Три мање од 6 година, тако да их не замене.
Шест је већа од 5. Ми замењивати.
Шест је мање од 9. Ми не мењате.
После другог пролазе кроз то изгледа овако: [2, 3, 5, 6, 9]. Савршено.
Сада, хајде да напишемо је у Псеудокод.
У основи, за сваки елемент у листи, потребно је да погледате
и елеменат директно свог права.
Ако су из реда у односу на другу - то јест, ако је елемент на левој
је већа од оне на десној - ми треба да замените два елемента.
>> Ми ово радимо за сваки елемент листе, а ми смо направили један пролаз кроз.
Сада само треба да урадите пасс-тхроугх довољно пута да обезбеди листу
је у потпуности, правилно поредани.
Али колико пута морамо проћи кроз листи
гарантујем да смо урадили?
Па, најгори сценарио је да ако имамо потпуно уназад листу.
Затим је потребно неколико пасс-тхроугхс једнак броју
елемената н-1.
Ако ово нема смисла интуитивно, мислим једноставног случају - листа [2, 1].
>> То ће да траје један пролаз правилно сортирање.
[3, 2, 1] - Најгори случај је да са 3 елемената сортирани уназад,
то ће узети 2 итерација до врсте.
После једне итерације, то је [2, 1, 3].
Други приноси сортиран низ [1, 2, 3].
Дакле, ви знате да никада нећете морати да прође кроз низ, у принципу,
више од н-1 пута, где је н број елемената у низу.
То се зове Буббле Сортирај јер највећи елементи теже да се "мехур-уп '
десно прилично брзо.
У ствари, овај алгоритам има веома занимљиву понашање.
>> Након м итерација кроз цео низ,
крајње десне м елементи су гарантована
бити сортирани у свом правом месту.
Ако желите да видите ово за себе,
можемо да пробамо на потпуно уназад листи [9, 6, 5, 3, 2].
Након једног пролазе кроз целу листу,
[Звук писања]
[6, 9, 5, 3, 2], [6, 5, 9, 3, 2], [6, 5, 3, 9, 2], [6, 5, 3, 2, 9]
десна крајња елеменат 9 је у свом правом месту.
После другог пролаз је 6 ће имати 'бубблед-уп' на
Други десна крајња место.
Два елемента на десној - 6 и 9 - ће бити у њиховим исправним местима
после прва два пасс-тхроугхс.
>> Дакле, како можемо искористити да би оптимизовали алгоритам?
Па, после једне итерације кроз низ
ми заправо не треба да проверите крајње десне елемент
јер знамо да је сређено.
Након два итерација, ми смо сигурни крајње десне два елемента су на месту.
Дакле, у принципу, после к итерација кроз цео низ,
провере последње к елемената је сувишна, јер знамо
они су у исправном месту већ.
>> Дакле, ако сте за сортирање низа од н елемената,
на првој итерацији - иоу'лл да сортирате све елементе - први н-0.
На другој итерацији, мораћете да погледате све елементе, али последњи -
Први н-1.
Други оптимизација може бити да проверите да ли је листа већ сортирана
после сваке итерације.
Ако је вец сортиран, ми не треба да се било више итерација
кроз листу.
Како можемо да урадимо ово?
Па, ако ми не правимо никакве свопови на пролаз листе,
јасно је да је листа сортирана већ зато што нисмо заменили ништа.
Дакле, ми дефинитивно не морају поново да сортирате.
>> Можда бисте могли да покрене променљиву заставе под називом "не сортира 'да
лаж и промените га истина ако морате да мењате никакве елементе на
једна итерација кроз низ.
Или слично, направи контра да рачунају колико свопови правите
на било ком итерације.
На крају једне итерације, ако нисте заменили неки од елемената,
знате листа већ сортира и готови сте.
Буббле Сорт, као и друге сортирање алгоритама, могу бити
намештена да ради за било елемената који имају којом методом.
>> То је, с обзиром да су два елемента имају начин да кажу да ли први
је већи него, једнако или мање од секунде.
На пример, можете да сортирате слова алфабета говорећи
да <б, б <ц, итд
Или можете да сортирате дана у недељи у којој Недеља је мање од понедељка
што је мање него у уторак.
>> Буббле Сортирај никако веома ефикасно или брзо сортирање алгоритам.
Његов најгори рунтиме је Велико О н ²
јер морате да направите н итерација кроз листу
провера н елемената сваки пролаз, нкн = н ².
То води пут значи да се као број елемената сте сортирање расте
рун тиме повећава куадратицалли.
>> Али, ако ефикасност није главна брига вашег програма
или ако ви само сортирање мали број елемената,
можда пронађете Буббле Сорт користан јер
то је један од најједноставнијих алгоритама за сортирање разумети
и да кодира.
То је такође одличан начин да стекнете искуство са превођењем теоријско
Алгоритам у стварном функционалну код.
Па, то је Буббле Сорт за тебе. Хвала за гледање.
ЦС50.ТВ