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 >> [Музыка играет]