1 00:00:00,000 --> 00:00:07,270 2 00:00:07,270 --> 00:00:10,390 >> МАРК грозен-СМИТ: Здраво, ја сам Марк Грозен-Смитх, а то је Куицксорт. 3 00:00:10,390 --> 00:00:13,520 Баш као и уметања врсте балона врста, Куицксорт је алгоритам за 4 00:00:13,520 --> 00:00:15,720 сортирање листе или низ ствари. 5 00:00:15,720 --> 00:00:19,080 Због једноставности, претпоставимо да су они ствари су само цели бројеви, али 6 00:00:19,080 --> 00:00:22,060 Знам да ради за Куицксорт више него само бројеви. 7 00:00:22,060 --> 00:00:24,720 Сцхнеллстарт је мало компликованији него уметање или мехур, али то је 8 00:00:24,720 --> 00:00:27,560 такође много ефикаснији у већини случајева. 9 00:00:27,560 --> 00:00:28,150 Чекај мало. 10 00:00:28,150 --> 00:00:30,760 Да ли је он то рекао "највише случајева, "не" све "? 11 00:00:30,760 --> 00:00:31,710 Интересантно, бр. 12 00:00:31,710 --> 00:00:33,560 Нису сви случајеви су исти. 13 00:00:33,560 --> 00:00:36,650 Не брините о овом детаљ ако вам нису видели Биг О нотацију још, али 14 00:00:36,650 --> 00:00:39,730 Куицксорт је О (н на квадрат) алгоритам у најгорем случају, баш као 15 00:00:39,730 --> 00:00:41,430 уметања или балон врста. 16 00:00:41,430 --> 00:00:44,950 Међутим, обично делује много као стари аналогни м алгоритма. 17 00:00:44,950 --> 00:00:45,750 Зашто? 18 00:00:45,750 --> 00:00:46,810 Вратићемо се на то касније. 19 00:00:46,810 --> 00:00:49,610 Али за сада, хајде да уче како Куицксорт функционише. 20 00:00:49,610 --> 00:00:53,080 >> Дакле, хајде да хода кроз ово Куицксортинг низ целих бројева од најмањег 21 00:00:53,080 --> 00:00:54,260 до највеће. 22 00:00:54,260 --> 00:01:00,110 Овде имамо целих бројева 6, 5, 1, 3, 8, 4, 7, 9, и 2. 23 00:01:00,110 --> 00:01:03,480 Прво, бирамо коначан елемент Овај низ - у овом случају, два - 24 00:01:03,480 --> 00:01:06,870 и позвати да је "пивот." Даље, почети да погледате две ствари - 25 00:01:06,870 --> 00:01:10,220 један, најнижи индекс, који ћу упутити као бораве десно од 26 00:01:10,220 --> 00:01:13,970 зид, и, два, крајње леви елеменат, који ћу назвати "струја 27 00:01:13,970 --> 00:01:17,260 елемента. "Шта ћемо да урадимо је да погледати све остале елементе, друге 28 00:01:17,260 --> 00:01:20,930 од стожер, и стави све елементе мањи него у зглобу 29 00:01:20,930 --> 00:01:24,140 лево од зида и свих оних већи од стожер на 30 00:01:24,140 --> 00:01:25,570 Право на зиду. 31 00:01:25,570 --> 00:01:29,560 Затим, на крају, ми ћемо одустати од пивот Право на том зиду да га стави између 32 00:01:29,560 --> 00:01:32,970 сви бројеви мањи од њега и све већи бројеви. 33 00:01:32,970 --> 00:01:34,460 >> Дакле, хајде да урадимо то. 34 00:01:34,460 --> 00:01:38,540 Покупите 2, ставио на зид почетак, и позвати 6 "струју 35 00:01:38,540 --> 00:01:41,590 елемента. "Зато желимо да погледате наш тренутни елемент, 6. 36 00:01:41,590 --> 00:01:44,200 И пошто је већи од 2, ми смо га оставити тамо да 37 00:01:44,200 --> 00:01:45,610 Право на зиду. 38 00:01:45,610 --> 00:01:48,980 Затим, идемо на погледајте 5 као наш Садашњи елемент и види да је овај 39 00:01:48,980 --> 00:01:51,840 је, опет, већи од стожер, па смо оставите га где је на десној страни 40 00:01:51,840 --> 00:01:53,190 страни зида. 41 00:01:53,190 --> 00:01:53,880 Ми идемо даље. 42 00:01:53,880 --> 00:01:56,750 Наш тренутни елемент је сада 1, и - ох. 43 00:01:56,750 --> 00:01:58,030 Ово је другачије. 44 00:01:58,030 --> 00:02:00,890 Садашњи елемент је сада мањи него пивот, па смо желели да га стави 45 00:02:00,890 --> 00:02:02,570 лево од зида. 46 00:02:02,570 --> 00:02:06,555 Да бисте то урадили, хајде да само пребаците струја елемент са најнижом индекса 47 00:02:06,555 --> 00:02:07,970 седи само на десно од зида. 48 00:02:07,970 --> 00:02:14,050 49 00:02:14,050 --> 00:02:17,570 Сада, идемо горе зид једне индекса тако да 1 је на левој страни 50 00:02:17,570 --> 00:02:19,750 страни зида сада. 51 00:02:19,750 --> 00:02:20,310 >> Чекај. 52 00:02:20,310 --> 00:02:23,450 Управо сам помешао елементе на десна страна зида, зар не? 53 00:02:23,450 --> 00:02:23,890 Не брини. 54 00:02:23,890 --> 00:02:24,930 То је у реду. 55 00:02:24,930 --> 00:02:27,570 Једино ми је стало за сада је да су сви ови елементи на 56 00:02:27,570 --> 00:02:29,570 Право на зиду су већи од вешања. 57 00:02:29,570 --> 00:02:31,760 Не прави ред је увек претпоставља. 58 00:02:31,760 --> 00:02:33,200 >> Сада, назад на сортирање. 59 00:02:33,200 --> 00:02:35,840 Дакле, ми смо и даље на гледајући остатак елемената. 60 00:02:35,840 --> 00:02:39,075 И у овом случају, видимо да постоје нема других елемената мање од 61 00:02:39,075 --> 00:02:42,100 пивот, тако да смо их све оставити на десна страна зида. 62 00:02:42,100 --> 00:02:45,980 Коначно, долазимо до тренутног елемента и види да је стожер. 63 00:02:45,980 --> 00:02:48,830 Сада, то значи да имамо две делови низа, први је 64 00:02:48,830 --> 00:02:51,820 мали на стожер и на левој страни зида, а други бића 65 00:02:51,820 --> 00:02:54,500 већи од стожер на десна страна зида. 66 00:02:54,500 --> 00:02:57,040 Желимо да стави пивот елемент између два, а онда ћемо знати 67 00:02:57,040 --> 00:03:01,000 да стожер је у свом правом Коначна сортирана место. 68 00:03:01,000 --> 00:03:04,980 Тако да смо се пребацили на први елемент десна страна зида са пивот, 69 00:03:04,980 --> 00:03:06,410 а ми знамо да стожер у свом десном положају. 70 00:03:06,410 --> 00:03:11,130 71 00:03:11,130 --> 00:03:15,650 >> Ми онда поновите овај процес за субарраис лево и десно од вешања. 72 00:03:15,650 --> 00:03:18,700 Пошто је последња субарраи је само један дуго елеменат, знамо да је то већ 73 00:03:18,700 --> 00:03:22,480 Сортед јер како можете бити ван нареди ако си само један елемент? 74 00:03:22,480 --> 00:03:28,860 За десне стране субарраи, ми види да је стожер 5, и Тхе Валл 75 00:03:28,860 --> 00:03:32,250 је само остало од 6. 76 00:03:32,250 --> 00:03:34,970 И струја елемент такође почиње као 6. 77 00:03:34,970 --> 00:03:36,200 Дакле, 6 је већи од 5. 78 00:03:36,200 --> 00:03:38,590 Ми га оставити тамо где је на десна страна зида. 79 00:03:38,590 --> 00:03:41,060 Сада, креће на, 3 је мања од 5. 80 00:03:41,060 --> 00:03:44,160 Тако да смо га пребацили са првог елемента само право на зид. 81 00:03:44,160 --> 00:03:47,944 82 00:03:47,944 --> 00:03:50,750 Сада, преселио сам зид још један. 83 00:03:50,750 --> 00:03:53,010 Сада, креће се на 8.. 84 00:03:53,010 --> 00:03:56,480 8 је већи од 5, и тако смо га оставили. 85 00:03:56,480 --> 00:03:58,720 4 је мање од 5, па смо га пребацили. 86 00:03:58,720 --> 00:04:02,950 87 00:04:02,950 --> 00:04:03,570 И на. 88 00:04:03,570 --> 00:04:04,820 И на. 89 00:04:04,820 --> 00:04:10,190 90 00:04:10,190 --> 00:04:13,670 >> Сваки пут када поновите процес на леве и десне стране низа. ми 91 00:04:13,670 --> 00:04:17,010 одабрати пивот и урадите поређења и створити још један ниво лево и 92 00:04:17,010 --> 00:04:18,240 десна субарраис. 93 00:04:18,240 --> 00:04:21,500 Ово рекурзивни позив ће се наставити све док смо до краја када смо 94 00:04:21,500 --> 00:04:25,290 подели укупан низ у само субарраис дужине 1. 95 00:04:25,290 --> 00:04:28,060 Одатле, ми знамо низ је сортиран јер сваки елемент има, у 96 00:04:28,060 --> 00:04:29,330 неки бод, био стожер. 97 00:04:29,330 --> 00:04:32,720 Другим речима, за сваки елемент, све бројеви са леве стране су мање 98 00:04:32,720 --> 00:04:36,420 вредности и сви бројеви до Право имају веће вредности. 99 00:04:36,420 --> 00:04:38,980 >> Овај метод функционише веома добро ако Вредност стожер изабраног је 100 00:04:38,980 --> 00:04:41,930 отприлике у средини опсег вредности листе. 101 00:04:41,930 --> 00:04:45,630 То би значило да, након крећемо елементи око, тамо око колико 102 00:04:45,630 --> 00:04:48,390 елементи са леве стране пивот као што постоје са десне. 103 00:04:48,390 --> 00:04:52,380 И дивиде-и-владај природа Куицксорт алгоритам се онда узима 104 00:04:52,380 --> 00:04:53,850 пун предност. 105 00:04:53,850 --> 00:04:57,500 Ово ствара рунтиме за О (н лог н,) н зато морамо да урадимо н минус 1 106 00:04:57,500 --> 00:05:01,640 поређења на свакој генерацији и лог н зато морамо да поделимо листу 107 00:05:01,640 --> 00:05:03,210 лог н пута. 108 00:05:03,210 --> 00:05:06,160 Међутим, у најгорим случајевима, то алгоритам заправо може бити О (н 109 00:05:06,160 --> 00:05:09,850 квадрат) Претпоставимо на свакој генерацији., стожер само тако се дешава да се 110 00:05:09,850 --> 00:05:12,520 најмањи или највећи Бројеви смо сортирање. 111 00:05:12,520 --> 00:05:15,870 То би значило разбије листу н пута и израда н минус 1 112 00:05:15,870 --> 00:05:17,690 поређења сваки пут. 113 00:05:17,690 --> 00:05:20,490 Тако, о н квадрат. 114 00:05:20,490 --> 00:05:22,000 >> Како можемо побољшати начин? 115 00:05:22,000 --> 00:05:25,100 Један добар начин да се побољша метод је да смањи вероватноћу да 116 00:05:25,100 --> 00:05:28,150 рунтиме је икада заправо о н квадрат. 117 00:05:28,150 --> 00:05:31,860 Запамтите ово најгоре, најгори могући сценарио може да се догоди само када 118 00:05:31,860 --> 00:05:35,320 пивот изабран је увек највиши или најнижа вредност у низу. 119 00:05:35,320 --> 00:05:38,630 Да би се обезбедило да је мање вероватно да ће се десити, можемо наћи осовину од 120 00:05:38,630 --> 00:05:42,610 избора више елемената и узимање средње вредности. 121 00:05:42,610 --> 00:05:44,650 >> Моје име је Марко грозен-Смит, и то је ЦС50. 122 00:05:44,650 --> 00:05:47,790 123 00:05:47,790 --> 00:05:50,930 >> Због једноставности, претпоставимо да су они ствари су само цели бројеви, али 124 00:05:50,930 --> 00:05:51,970 Знам тај Куицксерт - 125 00:05:51,970 --> 00:05:53,160 Куицксерт? 126 00:05:53,160 --> 00:05:55,200 Извините. 127 00:05:55,200 --> 00:06:02,000 >> Овде имамо целих бројева 6, 5, 1, 3, 8, 4, 9. 128 00:06:02,000 --> 00:06:03,200 >> ПРЕДСЕДНИК 1: Стварно? 129 00:06:03,200 --> 00:06:04,850 >> ПРЕДСЕДНИК 2: Немој тамо зауставити. 130 00:06:04,850 --> 00:06:06,100 >> ПРЕДСЕДНИК 1: Стварно? 131 00:06:06,100 --> 00:06:08,491