1 00:00:00,000 --> 00:00:08,532 >> [Музыка гуляе] 2 00:00:08,532 --> 00:00:12,060 >> ZAMYLA Чан: Першае, што вы маглі б апавяшчэнне аб знаходцы з'яўляецца тое, што мы ўжо 3 00:00:12,060 --> 00:00:13,450 ўжо код, напісаны для нас. 4 00:00:13,450 --> 00:00:15,160 Гэта называецца код размеркаванне. 5 00:00:15,160 --> 00:00:18,000 Такім чынам, мы не толькі напісанне ўласнай код з нуля больш. 6 00:00:18,000 --> 00:00:22,800 Хутчэй, мы запаўнення пустэч у некаторым папярэдне існуючага кода. 7 00:00:22,800 --> 00:00:27,790 >> Праграма find.c запытвае нумары запоўніць стог сена, пошук 8 00:00:27,790 --> 00:00:32,189 стозе сена для карыстальнікаў прадстаўленых іголкі, і ён робіць гэта шляхам выкліку роду і 9 00:00:32,189 --> 00:00:35,590 пошуку, функцыі, пэўныя у helpers.c. 10 00:00:35,590 --> 00:00:37,670 Так find.c напісана ўжо. 11 00:00:37,670 --> 00:00:40,770 Ваша задача напісаць памочнікаў. 12 00:00:40,770 --> 00:00:41,870 >> Так што мы робім? 13 00:00:41,870 --> 00:00:44,210 Мы рэалізацыі дзве функцыі. 14 00:00:44,210 --> 00:00:49,030 Пошук, які вяртае ісціну, калі значэнне знаходзіцца ў стозе сена, вяртаючыся 15 00:00:49,030 --> 00:00:51,370 ілжывым, калі значэнне не ў стозе сена. 16 00:00:51,370 --> 00:00:57,990 А потым мы таксама ажыццяўляе роду якая сартуе масіў з імем значэння. 17 00:00:57,990 --> 00:00:59,960 >> Так што давайце вырашаць пошуку. 18 00:00:59,960 --> 00:01:04,560 Пошук у цяперашні час рэалізавана ў выглядзе лінейны пошук, але вы можаце зрабіць значна 19 00:01:04,560 --> 00:01:05,550 лепш, чым гэта. 20 00:01:05,550 --> 00:01:09,910 Лінейны пошук ажыццяўляецца ў O часу н, які з'яўляецца даволі павольным. 21 00:01:09,910 --> 00:01:13,850 Хоць, ён можа шукаць любой спіс дадзена яму. 22 00:01:13,850 --> 00:01:20,130 Ваша задача заключаецца ў рэалізацыі бінарны пошук, які падчас выканання O з часопіса п. 23 00:01:20,130 --> 00:01:21,130 Гэта даволі хутка. 24 00:01:21,130 --> 00:01:23,170 >> Але ёсць агаворка. 25 00:01:23,170 --> 00:01:27,600 Двайковага пошуку можна толькі пошук праз папярэдне парадку п. спісаў. 26 00:01:27,600 --> 00:01:30,370 Чаму гэта адбываецца? 27 00:01:30,370 --> 00:01:32,620 >> Ну давайце паглядзім на прыкладзе. 28 00:01:32,620 --> 00:01:36,280 Улічваючы масіў значэнняў, стог сена, мы збіраемся шукаць 29 00:01:36,280 --> 00:01:37,130 іголкі. 30 00:01:37,130 --> 00:01:40,460 І ў гэтым прыкладзе цэлае тры. 31 00:01:40,460 --> 00:01:44,130 Такім чынам, што бінарны пошук працуе так, што мы параўнаем сярэдні кошт 32 00:01:44,130 --> 00:01:48,370 масіў да іголкі, гэтак жа, як, як мы адкрылі тэлефонную кнігу на сярэдзіне 33 00:01:48,370 --> 00:01:50,660 старонкі ў нулявым тыдзень. 34 00:01:50,660 --> 00:01:54,650 >> Такім чынам, пасля параўнання сярэдняе значэнне для іголка, вы можаце адмовіцца ад альбо 35 00:01:54,650 --> 00:01:58,530 налева або правая палова масіва зацягнуўшы свае межы. 36 00:01:58,530 --> 00:02:03,390 У гэтым выпадку, так як тры, наша іголка, менш за 10, сярэдняе значэнне, 37 00:02:03,390 --> 00:02:05,990 Права мяжа можа змяншацца. 38 00:02:05,990 --> 00:02:08,400 Але паспрабаваць зрабіць вашыя мяжы як мага шчыльней. 39 00:02:08,400 --> 00:02:11,630 Калі сярэдняе значэнне не іголка, то вы ведаеце, што вам не трэба, каб 40 00:02:11,630 --> 00:02:13,010 ўключыць яго ў гэтай катэгорыі. 41 00:02:13,010 --> 00:02:17,310 Такім чынам, вы маеце рацыю мяжа можа зацягнуць пошук мяжы ледзь-ледзь больш, 42 00:02:17,310 --> 00:02:21,770 і гэтак далей і таму падобнае да вы знайшлі іголку. 43 00:02:21,770 --> 00:02:23,480 >> Такім чынам, што ж псевдокод выглядаць? 44 00:02:23,480 --> 00:02:28,420 Ну а мы ўсё яшчэ праглядаючы спіс і да гэтага часу элементы 45 00:02:28,420 --> 00:02:33,690 глядзець у, мы бярэм сярэдзіну спісу, і параўнаць, што сярэдняе значэнне для 46 00:02:33,690 --> 00:02:34,950 наша іголка. 47 00:02:34,950 --> 00:02:37,310 Калі яны роўныя, то гэта азначае, што мы ў знайшла іголку, і мы можам 48 00:02:37,310 --> 00:02:38,990 вярнуцца дакладна. 49 00:02:38,990 --> 00:02:42,870 >> У адваротным выпадку, калі іголка менш сярэдняе значэнне, тое, што азначае, што мы 50 00:02:42,870 --> 00:02:47,280 можна адкінуць правую палову, і проста пошук па левы бок масіва. 51 00:02:47,280 --> 00:02:51,090 У адваротным выпадку, мы будзем шукаць Правая частка масіва. 52 00:02:51,090 --> 00:02:54,410 І ў канцы, калі вы не маеце любыя больш элементаў злева пошук, але вы 53 00:02:54,410 --> 00:02:58,050 Нічога не знайшлі іголку яшчэ, то вы вярнуцца ілжывым, таму што іголка 54 00:02:58,050 --> 00:03:01,890 дакладна не ў стозе сена. 55 00:03:01,890 --> 00:03:05,270 >> Зараз акуратна рэч пра гэта псевдокоде у двайковага пошуку з'яўляецца тое, што ён можа быць 56 00:03:05,270 --> 00:03:09,940 інтэрпрэтаваць як альбо паўтаральны або рэкурсіўная рэалізацыя. 57 00:03:09,940 --> 00:03:13,810 Таму было б рэкурсіўным, калі вы назвалі функцыя пошуку ў пошуку 58 00:03:13,810 --> 00:03:17,350 функцыянаваць па абодва паловы масіва. 59 00:03:17,350 --> 00:03:21,030 Мы разгледзім рэкурсіі крыху пазней у Вядома, але ведаю, што гэта 60 00:03:21,030 --> 00:03:24,190 варыянт, калі вы хочаце паспрабаваць. 61 00:03:24,190 --> 00:03:26,030 >> Зараз давайце паглядзім на роду. 62 00:03:26,030 --> 00:03:30,750 Сартаваць прымае масіў і цэлае п, што памер масіва. 63 00:03:30,750 --> 00:03:34,030 Зараз ёсць розныя тыпы ў духу, і вы можаце глядзець на некаторыя 64 00:03:34,030 --> 00:03:36,370 шорты для дэманстрацый і тлумачэнняў. 65 00:03:36,370 --> 00:03:39,580 Які вяртаецца тып для нашага Функцыя сартавання, з'яўляецца нікчэмным. 66 00:03:39,580 --> 00:03:43,580 Дык гэта значыць, што мы не збіраемся вярнуцца любы масіў з роду. 67 00:03:43,580 --> 00:03:48,140 Мы на самой справе збіраецца мяняць вельмі Масіў, які быў прыняты ў нас. 68 00:03:48,140 --> 00:03:52,290 >> І гэта магчыма, таму што масівы перадаюцца па спасылцы ў С. Цяпер мы 69 00:03:52,290 --> 00:03:55,290 гл. пра гэта крыху пазней, але Істотнае адрозненне паміж перадачай 70 00:03:55,290 --> 00:03:59,340 у чымсьці накшталт цэлае і праходжання ў масіве, у тым, што, калі вы 71 00:03:59,340 --> 00:04:03,490 перайсці ў цэлы лік, C толькі збіраецца зрабіць копію гэтага цэлага і перадаць 72 00:04:03,490 --> 00:04:04,450 яго функцыі. 73 00:04:04,450 --> 00:04:08,530 Арыгінальны пераменная не будзе зменена Пасля таго, як функцыя скончаная. 74 00:04:08,530 --> 00:04:12,480 З масіва, з другога боку, гэта не збіраецца рабіць копію, і вы будзеце 75 00:04:12,480 --> 00:04:17,910 фактычна рэдагавання Сам вельмі масіў. 76 00:04:17,910 --> 00:04:21,269 >> Так адзін тып роду з'яўляецца выбар роду. 77 00:04:21,269 --> 00:04:24,750 Выбар роду працуе, пачынаючы з пачатак, а затым ітэрацыі 78 00:04:24,750 --> 00:04:26,820 зноў і знайсці найменшы элемент. 79 00:04:26,820 --> 00:04:30,710 І тады вы памяняць, што маленькі элемент з першай. 80 00:04:30,710 --> 00:04:34,360 А потым вы пераходзіце на другі элемент , Знайсці наступны па велічыні 81 00:04:34,360 --> 00:04:38,320 элемент, а затым памяняць, што з Другі элемент у масіве, так як 82 00:04:38,320 --> 00:04:41,100 першы элемент ўжо адсартаваныя. 83 00:04:41,100 --> 00:04:45,370 І так, то вы па-ранейшаму для кожнага элементам у працэсе выяўлення самых маленькіх 84 00:04:45,370 --> 00:04:47,690 значэнне і замены яго. 85 00:04:47,690 --> 00:04:53,460 >> Бо я роўная 0, самы першы элемент п мінус 1, вы збіраецеся параўноўваць 86 00:04:53,460 --> 00:04:57,820 кожны наступны значэнне пасля гэтага і знайсці індэкс мінімальнага значэння. 87 00:04:57,820 --> 00:05:02,520 Як толькі вы знойдзеце індэкс мінімальнага значэння, вы можаце памяняць гэта значэнне масіва 88 00:05:02,520 --> 00:05:05,930 Мінімальны і масіў І. 89 00:05:05,930 --> 00:05:09,760 >> Іншы тып роду, што вы можаце рэалізаваць гэта пузырьковый сартавання. 90 00:05:09,760 --> 00:05:14,380 Так пузырьковый сартавання перабірае спіс параўнанні суседніх элементаў і 91 00:05:14,380 --> 00:05:17,720 перапампоўкі элементы, якія знаходзяцца ў няправільным парадку. 92 00:05:17,720 --> 00:05:22,380 І такім чынам, найбольшы элемент будзе тапырыцца да канца. 93 00:05:22,380 --> 00:05:28,070 ня І спіс сартуецца раз не больш элементы былі замененыя. 94 00:05:28,070 --> 00:05:31,920 >> Такім чынам, гэта два прыкладу роду алгарытмы, якія можна рэалізаваць для 95 00:05:31,920 --> 00:05:33,230 праграма знаходка. 96 00:05:33,230 --> 00:05:37,350 Як толькі вы скончыце роду, і ў цябе зроблена пошуку, вы скончыце. 97 00:05:37,350 --> 00:05:39,720 Мяне клічуць Zamyla, і гэта CS50. 98 00:05:39,720 --> 00:05:46,987 >> [Музыка гуляе]