1 00:00:00,000 --> 00:00:08,532 >> [MUZYKA GRA] 2 00:00:08,532 --> 00:00:12,060 >> ZAMYLA Chandler: Pierwszą rzeczą, którą może Zawiadomienie o znalezisku jest to, że już 3 00:00:12,060 --> 00:00:13,450 Kod napisany nie dla nas. 4 00:00:13,450 --> 00:00:15,160 Jest to tak zwany kod dystrybucji. 5 00:00:15,160 --> 00:00:18,000 Więc nie tylko pisanie własne kod od zera już. 6 00:00:18,000 --> 00:00:22,800 Raczej jesteśmy wypełniania pustek w pewnym uprzednio istniejącym kodzie. 7 00:00:22,800 --> 00:00:27,790 >> Program find.c monituje o numerach wypełnić stóg siana, wyszukiwania 8 00:00:27,790 --> 00:00:32,189 stóg siana w igle składane przez użytkownika, i robi to przez wywołanie rodzaju i 9 00:00:32,189 --> 00:00:35,590 wyszukiwania, funkcje zdefiniowane w helpers.c. 10 00:00:35,590 --> 00:00:37,670 Więc find.c napisano już. 11 00:00:37,670 --> 00:00:40,770 Twoim zadaniem jest napisać pomocników. 12 00:00:40,770 --> 00:00:41,870 >> Więc co robimy? 13 00:00:41,870 --> 00:00:44,210 Jesteśmy realizacji dwóch funkcji. 14 00:00:44,210 --> 00:00:49,030 Wyszukiwarka, która zwraca true, jeśli wartość znajduje się w stogu siana, wracając 15 00:00:49,030 --> 00:00:51,370 false, jeśli wartość jest nie w stogu siana. 16 00:00:51,370 --> 00:00:57,990 A potem mamy również realizację rodzaju które sortuje tablicę o nazwie wartości. 17 00:00:57,990 --> 00:00:59,960 >> Zajmijmy się więc poszukiwania. 18 00:00:59,960 --> 00:01:04,560 Wyszukiwanie jest obecnie realizowany jako Wyszukiwanie liniowe, ale można to zrobić o wiele 19 00:01:04,560 --> 00:01:05,550 lepiej. 20 00:01:05,550 --> 00:01:09,910 Szukaj liniowy realizowany jest w O czasu n, które jest dość powolna. 21 00:01:09,910 --> 00:01:13,850 Chociaż, może to sprawdzić każda lista podana do niego. 22 00:01:13,850 --> 00:01:20,130 Twoim zadaniem jest wdrożenie wyszukiwanie binarne, które prowadzi razem Ö log n.. 23 00:01:20,130 --> 00:01:21,130 To dość szybko. 24 00:01:21,130 --> 00:01:23,170 >> Ale jest warunek. 25 00:01:23,170 --> 00:01:27,600 Binary wyszukiwania może wyłącznie przez wstępnie posortowanych list. 26 00:01:27,600 --> 00:01:30,370 Dlaczego tak jest? 27 00:01:30,370 --> 00:01:32,620 >> No spójrzmy na przykład. 28 00:01:32,620 --> 00:01:36,280 Biorąc pod uwagę, tablica wartości, stóg siana, będziemy szukać 29 00:01:36,280 --> 00:01:37,130 igły. 30 00:01:37,130 --> 00:01:40,460 I w tym przypadku, całkowitą trzy. 31 00:01:40,460 --> 00:01:44,130 Sposób, że wyszukiwarka działa jest to, że binarny Porównując wartość środku 32 00:01:44,130 --> 00:01:48,370 Tablica z igłą, tak jak jak otworzyliśmy książkę telefoniczną na środku 33 00:01:48,370 --> 00:01:50,660 strona w tygodniu zerowym. 34 00:01:50,660 --> 00:01:54,650 >> Więc po porównaniu wartości środku igły, można odrzucić albo 35 00:01:54,650 --> 00:01:58,530 w lewo lub w prawo pół tablicy dokręcając swoje granice. 36 00:01:58,530 --> 00:02:03,390 W tym przypadku, ponieważ trzy nasze igła jest mniejsza niż 10, to wartość środkowy 37 00:02:03,390 --> 00:02:05,990 prawo związane może zmniejszyć. 38 00:02:05,990 --> 00:02:08,400 Ale spróbuj zrobić swoje granice tak mocno, jak to możliwe. 39 00:02:08,400 --> 00:02:11,630 Jeśli wartość środkowa nie jest igła, to wiesz, że nie musisz się 40 00:02:11,630 --> 00:02:13,010 umieścić go w wyszukiwaniu. 41 00:02:13,010 --> 00:02:17,310 Tak masz rację związany może dokręcić wyszukiwania granice tylko trochę więcej, 42 00:02:17,310 --> 00:02:21,770 i tak dalej, i tak dalej, aż Ci znaleźć igłę. 43 00:02:21,770 --> 00:02:23,480 >> Więc co pseudokod wygląda? 44 00:02:23,480 --> 00:02:28,420 Cóż, gdy my wciąż patrząc przez lista i jeszcze elementy do 45 00:02:28,420 --> 00:02:33,690 spojrzeć w, bierzemy na środku listy, i porównać tę wartość do środkowego 46 00:02:33,690 --> 00:02:34,950 nasza igła. 47 00:02:34,950 --> 00:02:37,310 Jeśli są równe, to znaczy mamy znaleźć igłę i możemy 48 00:02:37,310 --> 00:02:38,990 return true. 49 00:02:38,990 --> 00:02:42,870 >> W przeciwnym razie, jeśli igła jest mniejsza niż wartość środkowa, to znaczy, że 50 00:02:42,870 --> 00:02:47,280 może odrzucić prawą połowę, a tylko szukaj po lewej stronie tablicy. 51 00:02:47,280 --> 00:02:51,090 W przeciwnym razie będziemy szukać prawej stronie tablicy. 52 00:02:51,090 --> 00:02:54,410 I na koniec, jeśli nie ma żadnych więcej elementów lewo, ale można szukać 53 00:02:54,410 --> 00:02:58,050 nie znalazłem swoją igłę jeszcze, to return false, ponieważ igły 54 00:02:58,050 --> 00:03:01,890 na pewno nie jest w stogu siana. 55 00:03:01,890 --> 00:03:05,270 >> Teraz miłe rzeczy na temat tego Pseudokod w poszukiwaniu binarnym, który może być 56 00:03:05,270 --> 00:03:09,940 interpretować albo jako iteracyjny lub rekurencyjna realizacja. 57 00:03:09,940 --> 00:03:13,810 Więc byłoby rekurencyjny jeśli nazywa Funkcja wyszukiwania w poszukiwaniu 58 00:03:13,810 --> 00:03:17,350 funkcjonować na każdej połowie tej tablicy. 59 00:03:17,350 --> 00:03:21,030 Omówimy rekursji nieco później w Oczywiście, ale wiem, że jest to 60 00:03:21,030 --> 00:03:24,190 opcję, jeśli chcesz, aby spróbować. 61 00:03:24,190 --> 00:03:26,030 >> Teraz spójrzmy na sortowanie. 62 00:03:26,030 --> 00:03:30,750 Sortuj pobiera tablicę i całkowitą n, która jest rozmiar tablicy. 63 00:03:30,750 --> 00:03:34,030 Teraz są różne rodzaje od rodzaju i można spojrzeć na niektóre 64 00:03:34,030 --> 00:03:36,370 spodenki dla dema i objaśnienia. 65 00:03:36,370 --> 00:03:39,580 Powrót do naszego typu Funkcja sortowania jest nieaktualna. 66 00:03:39,580 --> 00:03:43,580 Więc to oznacza, że ​​nie będziemy powrót żadnej tablicy z rodzaju. 67 00:03:43,580 --> 00:03:48,140 Jesteśmy rzeczywiście będzie zmienić bardzo Tablica została przekazana do nas. 68 00:03:48,140 --> 00:03:52,290 >> I to jest możliwe, ponieważ tablice są przekazywane przez referencję w C, teraz będziemy 69 00:03:52,290 --> 00:03:55,290 zobacz więcej o tym później, ale Zasadnicza różnica między biegiem 70 00:03:55,290 --> 00:03:59,340 w coś takiego jak liczba całkowita i przemijania w tablicy, jest to, że kiedy 71 00:03:59,340 --> 00:04:03,490 przekazać w postaci liczby całkowitej, C jest po prostu będzie zrobić kopię tej liczby całkowitej i przekazać 72 00:04:03,490 --> 00:04:04,450 jej funkcji. 73 00:04:04,450 --> 00:04:08,530 Zmienna oryginalna nie zostanie zmieniony po zakończeniu funkcji. 74 00:04:08,530 --> 00:04:12,480 Z tablicy, z drugiej strony, jest nie zamierza wykonać kopię, a będziesz 75 00:04:12,480 --> 00:04:17,910 faktycznie edycji bardzo sama tablica. 76 00:04:17,910 --> 00:04:21,269 >> Więc jeden rodzaj sortowanie jest Sortuj wybór. 77 00:04:21,269 --> 00:04:24,750 Wybór sortowania zaczynają się prace początek, a następnie iteracyjne 78 00:04:24,750 --> 00:04:26,820 nad i znaleźć najmniejszy element. 79 00:04:26,820 --> 00:04:30,710 A następnie zamienić, że najmniejsza Element z pierwszym. 80 00:04:30,710 --> 00:04:34,360 A następnie przejść do drugiego elementu , Znaleźć następna najmniejsza 81 00:04:34,360 --> 00:04:38,320 Element, a następnie zamienić, że z Drugi element macierzy, ponieważ 82 00:04:38,320 --> 00:04:41,100 Pierwszy element jest już posortowana. 83 00:04:41,100 --> 00:04:45,370 I tak to nadal dla każdego elementem identyfikacji najmniejsza 84 00:04:45,370 --> 00:04:47,690 wartości i zamiana go. 85 00:04:47,690 --> 00:04:53,460 >> Bo jest równa 0, pierwszy element, n minus 1, masz zamiar porównać 86 00:04:53,460 --> 00:04:57,820 każda następna wartość po tym i znaleźć Wskaźnik wartości minimalnej. 87 00:04:57,820 --> 00:05:02,520 Po znalezieniu indeksu wartości minimalnej, można zamienić tę wartość z tablicy 88 00:05:02,520 --> 00:05:05,930 Minimalna i tablicy I. 89 00:05:05,930 --> 00:05:09,760 >> Innym rodzajem rodzaju, że można wdrożenia jest sortowanie bąbelkowe. 90 00:05:09,760 --> 00:05:14,380 Tak iteracje bańka na listę sortowania porównywanie sąsiednich elementów i 91 00:05:14,380 --> 00:05:17,720 ciężkich elementów, które są w złej kolejności. 92 00:05:17,720 --> 00:05:22,380 I w ten sposób największy elementem będzie bańka do końca. 93 00:05:22,380 --> 00:05:28,070 A lista jest posortowana po nie więcej elementy zostały zamienione. 94 00:05:28,070 --> 00:05:31,920 >> To są dwa przykłady rodzaju algorytmy, które można wdrożyć do 95 00:05:31,920 --> 00:05:33,230 Program find. 96 00:05:33,230 --> 00:05:37,350 Po zakończeniu sortowania, a ty wykonane wyszukiwanie, skończysz. 97 00:05:37,350 --> 00:05:39,720 Nazywam się Zamyla, i to jest CS50. 98 00:05:39,720 --> 00:05:46,987 >> [MUZYKA GRA]