[Powered by Google Translate] [Балонот Сортирај]
[JACKSON STEINKAMP Универзитетот Харвард]
[Ова е CS50. CS50TV]
Меур Сортирај е пример за сортирање алгоритам -
тоа е, постапката за сортирање збир на елементи
опаѓачки или растечки редослед.
На пример, ако си сакал да го решите низа се состои од броеви
[3, 5, 2, 9], коректна имплементација на меур Сортирај ќе се врати на
подредени низа [2, 3, 5, 9] во растечки редослед.
Сега, јас одам да се објасни во pseudocode како алгоритам работи.
>> Да речеме дека ние сме сортирање листа на 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]. Совршена.
Сега, ајде да напишете го во pseudocode.
Во суштина, за секој елемент во листата, треба да се погледне во него
и елемент директно на своето право.
Ако тие се надвор од однос еден на друг - тоа е, ако елемент на левата
е поголем од оној на десната - ние треба да се разменуваат со два елементи.
>> Ние го правиме ова за секој елемент од листата, и ние го направи еден поминат низ.
Сега ние само треба да направите премин преку доволно пати за да се обезбеди листа
е целосно, правилно подредени.
Но, колку пати ние мора да поминат низ листата на
Гарантирам дека ќе завршиш?
Па, најлошото сценарио е ако имаме целосно наназад листа.
Тогаш е потребно голем број на премин низ еднаков на бројот
на елементите n-1.
Ако ова не дава никаква смисла интуитивно, мислам на едноставен случај - Листа [2, 1].
>> Ова се случува да се земе еден премин преку да се најде правилно.
[3, 2, 1] - Најлошото е тоа што со 3 елементи подредени наназад,
тоа се случува да се земе 2 повторувања за сортирање.
По една повторување, тоа е [2, 1, 3].
Вториот приноси на подредени низа [1, 2, 3].
Значи знаеш дека никогаш не треба да се оди преку низа, во целина,
повеќе од n-1 времиња, каде n е бројот на елементи во низата.
Таа се вика меур Сортирај бидејќи најголемиот елементи имаат тенденција да "балон-up"
на правото прилично брзо.
Всушност, овој алгоритам има многу интересни однесување.
>> По m повторувања низ целата низа,
на најдесната m елементи се гарантира
да се решат во нивните правилната место.
Ако сакате да видите ова за себе,
можеме да ја обидат на целосно наназад Листа [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 ќе имаат "клобуркаше-up" на
Вториот најдесната место.
На два елементи на десната - 6 и 9 - ќе биде во нивната правилна места
по првите две помине низ тие.
>> Значи, како ние да го користите овој да се оптимизира алгоритам?
Па, по една повторување преку низа
ние не, всушност треба да се провери најдесната елемент
затоа што знаеме тоа подредени.
По две повторувања, знаеме дека најдесната два елементи се во место.
Значи, во целина, по к повторувања низ целиот спектар,
проверка на последниот к елементи е излишна бидејќи знаеме
тие се во точната локација веќе.
>> Значи, ако сте сортирање низа од n елементи,
на првата итерација - you'll треба да решите сите елементи - првите n-0.
На вториот повторување, ќе треба да се погледне во сите елементи, но во последно -
на првите n-1.
Друга оптимизација може да биде да се провери дали листата е веќе сортирана
по секое повторување.
Ако тоа е веќе сортирани, ние не треба да направите било какви повеќе повторувања
низ листата.
Како можеме да го направите ова?
Па, ако не се направи било свопови на премин преку на листата,
јасно е дека листата е веќе сортирана, бидејќи ние не разменуваат ништо.
Значи ние дефинитивно не треба да се најде повторно.
>> Можеби можете да се иницијализира знаме променлива наречена "не подредени ', за да
лажни и промените на true ако треба да се разменуваат сите елементи на
еден повторување преку низа.
Или слично, да се направи контра да се брои колку свопови ќе се направи
на која било дадена повторување.
На крајот на повторување, ако не се разменуваат било кој од елементите,
знаеш листата е веќе сортирани и ќе завршиш.
Меур Сортирај, како и другите алгоритми за сортирање, може да биде
tweaked да работат за било какви елементи кои имаат нарачување метод.
>> Тоа е, со оглед два елементи имате начин да се каже дали првиот
е поголем од еднаква или помала од секунда.
На пример, можете да сортирање букви од азбуката, велејќи
дека <б, б <в, итн
Или може да се најде денови од неделата каде недела е помалку од понеделник
што е помалку од вторникот.
>> Меур Сортирај никој случај не е многу ефикасна или брзо сортирање алгоритам.
Нејзините најлошото траење е Биг О од n ²
затоа што треба да направите n итерации преку листа
проверка на сите n елементи секој премин преку, nxn = n ².
Ова кандидира време, значи дека како број на елементи сте сортирање зголемува,
во бегство време се зголемува quadratically.
>> Но, ако ефикасност не е голема загриженост на вашата програма
или ако сте само сортирање мал број на елементи,
може да најдете меур Сортирај корисни, бидејќи
тоа е еден од наједноставните сортирање алгоритми за да се разбере
и да се код.
Тоа е исто така одличен начин да се добие искуство со преведување теоретски
алгоритам во вистински функционирање код.
Па, тоа е меур Сортирај за вас. Ви благодариме за гледање.
CS50.TV