1 00:00:00,000 --> 00:00:08,532 >> [Muziek] 2 00:00:08,532 --> 00:00:12,060 >> ZAMYLA CHAN: Het eerste wat je zou bericht over vondst is dat we al 3 00:00:12,060 --> 00:00:13,450 hebben code geschreven voor ons. 4 00:00:13,450 --> 00:00:15,160 Dit heet verdeelsleutel. 5 00:00:15,160 --> 00:00:18,000 Zodat we niet alleen het schrijven van onze eigen coderen van kras meer. 6 00:00:18,000 --> 00:00:22,800 Integendeel, we vullen de holtes in sommige reeds bestaande code. 7 00:00:22,800 --> 00:00:27,790 >> De status van huidige map programma vraagt ​​voor getallen om de hooiberg te vullen, zoekt het 8 00:00:27,790 --> 00:00:32,189 hooiberg voor een gebruiker ingediend naald, en doet dit door te bellen naar soort en 9 00:00:32,189 --> 00:00:35,590 zoeken, functies gedefinieerd in helpers.c. 10 00:00:35,590 --> 00:00:37,670 Dus status van huidige map is al geschreven. 11 00:00:37,670 --> 00:00:40,770 Jouw taak is om helpers te schrijven. 12 00:00:40,770 --> 00:00:41,870 >> Dus wat doen we? 13 00:00:41,870 --> 00:00:44,210 We implementeren twee functies. 14 00:00:44,210 --> 00:00:49,030 Zoek geeft true als een waarde is te vinden in de hooiberg, terugkerende 15 00:00:49,030 --> 00:00:51,370 false als de waarde is niet in de hooiberg. 16 00:00:51,370 --> 00:00:57,990 En dan zijn we ook de uitvoering sorteren die sorteert de array genoemd waarden. 17 00:00:57,990 --> 00:00:59,960 >> Dus laten we zoeken te pakken. 18 00:00:59,960 --> 00:01:04,560 Zoeken wordt momenteel geïmplementeerd als een lineaire zoeken, maar je kunt veel doen 19 00:01:04,560 --> 00:01:05,550 beter dan dat. 20 00:01:05,550 --> 00:01:09,910 Lineair zoeken is in O geïmplementeerd n tijd, dat is heel traag. 21 00:01:09,910 --> 00:01:13,850 Hoewel, het kan zoeken elke lijst gegeven. 22 00:01:13,850 --> 00:01:20,130 Jouw taak is om binary search uit te voeren, die tijd O van log n heeft gelopen. 23 00:01:20,130 --> 00:01:21,130 Dat is behoorlijk snel. 24 00:01:21,130 --> 00:01:23,170 >> Maar er is een bepaling. 25 00:01:23,170 --> 00:01:27,600 Binary search kunt alleen zoeken door voorgesorteerd lijsten. 26 00:01:27,600 --> 00:01:30,370 Waarom is dat? 27 00:01:30,370 --> 00:01:32,620 >> Nou laten we eens kijken naar een voorbeeld. 28 00:01:32,620 --> 00:01:36,280 Gegeven een matrix met waarden, de hooiberg, we gaan op zoek 29 00:01:36,280 --> 00:01:37,130 voor een naald. 30 00:01:37,130 --> 00:01:40,460 En in dit voorbeeld het gehele getal drie. 31 00:01:40,460 --> 00:01:44,130 De manier waarop binary search werkt is dat Vergelijken we de middelste waarde van 32 00:01:44,130 --> 00:01:48,370 de array om de naald, net als hoe we een telefoonboek geopend voor het midden 33 00:01:48,370 --> 00:01:50,660 pagina in week nul. 34 00:01:50,660 --> 00:01:54,650 >> Dus na de middelste waarde te vergelijken met de naald, kunt u weggooien ofwel de 35 00:01:54,650 --> 00:01:58,530 linker of de rechter helft van de array door aanscherping van je grenzen. 36 00:01:58,530 --> 00:02:03,390 In dit geval, aangezien drie onze naald, minder dan 10, de middelste waarde, de 37 00:02:03,390 --> 00:02:05,990 recht gebonden kan verminderen. 38 00:02:05,990 --> 00:02:08,400 Maar probeer je grenzen te maken zo strak mogelijk. 39 00:02:08,400 --> 00:02:11,630 Als de middelste waarde is niet de naald, dan weet je dat je niet hoeft te 40 00:02:11,630 --> 00:02:13,010 opnemen in uw zoekopdracht. 41 00:02:13,010 --> 00:02:17,310 Dus je hebt gelijk gebonden kan draai de zoeken grenzen slechts een klein beetje meer, 42 00:02:17,310 --> 00:02:21,770 en zo verder en zo voort totdat je je naald te vinden. 43 00:02:21,770 --> 00:02:23,480 >> Dus wat doet de pseudocode eruit? 44 00:02:23,480 --> 00:02:28,420 Goed, terwijl we nog steeds op zoek via de lijst en hebben nog elementen aan 45 00:02:28,420 --> 00:02:33,690 kijk in, nemen we het midden van de lijst, en vergelijk die middelste waarde aan 46 00:02:33,690 --> 00:02:34,950 onze naald. 47 00:02:34,950 --> 00:02:37,310 Als ze gelijk zijn, dan betekent dat we hebben vond de naald en we kunnen 48 00:02:37,310 --> 00:02:38,990 return true. 49 00:02:38,990 --> 00:02:42,870 >> Anders, als de naald is minder dan de middelste waarde, dan betekent dat we 50 00:02:42,870 --> 00:02:47,280 kan de rechter helft weggooien, en gewoon zoek de linkerzijde van de array. 51 00:02:47,280 --> 00:02:51,090 Anders zullen we zoeken in de rechterzijde van de array. 52 00:02:51,090 --> 00:02:54,410 En aan het eind, als je die niet hebt meer elementen overgelaten om te zoeken, maar je 53 00:02:54,410 --> 00:02:58,050 nog niet gevonden je naald, dan moet je return false omdat de naald 54 00:02:58,050 --> 00:03:01,890 zeker niet in de hooiberg. 55 00:03:01,890 --> 00:03:05,270 >> Nu een nette ding over deze pseudocode binair zoeken is dat het kan worden 56 00:03:05,270 --> 00:03:09,940 geïnterpreteerd als een iteratief of recursieve implementatie. 57 00:03:09,940 --> 00:03:13,810 Dus het zou recursieve zijn als je geroepen de zoekfunctie binnen de zoekopdracht 58 00:03:13,810 --> 00:03:17,350 werken aan elke helft van de array. 59 00:03:17,350 --> 00:03:21,030 We zullen recursie een beetje later in de dekking natuurlijk, maar weet wel dat het een 60 00:03:21,030 --> 00:03:24,190 optie als u wilt proberen. 61 00:03:24,190 --> 00:03:26,030 >> Laten we nu eens kijken naar soort. 62 00:03:26,030 --> 00:03:30,750 Sorteren neemt een array en het integer n, dat is de grootte van de matrix. 63 00:03:30,750 --> 00:03:34,030 Nu zijn er verschillende soorten van soorten, en je kunt kijken naar een aantal 64 00:03:34,030 --> 00:03:36,370 shorts voor demo's en uitleg. 65 00:03:36,370 --> 00:03:39,580 Het type rendement voor onze sorteerfunctie is nietig. 66 00:03:39,580 --> 00:03:43,580 Dus dat betekent dat we niet gaan aan een reeks terug van soort. 67 00:03:43,580 --> 00:03:48,140 We zijn eigenlijk gaan naar de zeer veranderen array die werd doorgegeven aan ons. 68 00:03:48,140 --> 00:03:52,290 >> En dat is mogelijk omdat arrays zijn bij verwijzing doorgegeven in C. Nu zullen we 69 00:03:52,290 --> 00:03:55,290 Bekijk meer over dit later, maar de wezenlijk verschil tussen het voorbijgaan 70 00:03:55,290 --> 00:03:59,340 in iets als een integer en passerende in een array, is dat wanneer je 71 00:03:59,340 --> 00:04:03,490 passeren in een geheel getal, is C gewoon gaan maak een kopie van die integer en doorgeven 72 00:04:03,490 --> 00:04:04,450 het aan de functie. 73 00:04:04,450 --> 00:04:08,530 De oorspronkelijke variabele wordt niet gewijzigd zodra de functie is beëindigd. 74 00:04:08,530 --> 00:04:12,480 Met een matrix, anderzijds, het niet van plan om een ​​kopie te maken, en je zult 75 00:04:12,480 --> 00:04:17,910 daadwerkelijk het bewerken van de zeer serie zelf. 76 00:04:17,910 --> 00:04:21,269 >> Dus een soort soort is de selectie sorteren. 77 00:04:21,269 --> 00:04:24,750 De selectie sorteren werkt door te beginnen bij het begin, en dan herhalen 78 00:04:24,750 --> 00:04:26,820 over en vinden het kleinste element. 79 00:04:26,820 --> 00:04:30,710 En dan moet je ruilen dat kleinste element met het eerste. 80 00:04:30,710 --> 00:04:34,360 En dan moet je naar het tweede element Zoek de volgende kleinste 81 00:04:34,360 --> 00:04:38,320 element, en dan wisselen die met de tweede element in de array, omdat 82 00:04:38,320 --> 00:04:41,100 Het eerste element is al gesorteerd. 83 00:04:41,100 --> 00:04:45,370 En dus dan blijven je voor elke element identificeren het kleinste 84 00:04:45,370 --> 00:04:47,690 waarde en het ruilen het uit. 85 00:04:47,690 --> 00:04:53,460 >> Want ik gelijk is aan 0, het eerste element om n minus 1, je gaat om te vergelijken 86 00:04:53,460 --> 00:04:57,820 elke volgende waarde na dat en vinden de index van de minimale waarde. 87 00:04:57,820 --> 00:05:02,520 Zodra je de minimale waarde-index, kun je die waarde van de array te ruilen 88 00:05:02,520 --> 00:05:05,930 minimum en serie I. 89 00:05:05,930 --> 00:05:09,760 >> Een ander type van soort dat je kunt implementeren is bubble sort. 90 00:05:09,760 --> 00:05:14,380 Dus bubble sort doorloopt de lijst vergelijken van aangrenzende elementen en 91 00:05:14,380 --> 00:05:17,720 omwisselen van de elementen die zijn in de verkeerde volgorde. 92 00:05:17,720 --> 00:05:22,380 En zo, de grootste element zal bubble tot het einde. 93 00:05:22,380 --> 00:05:28,070 En de lijst wordt eenmaal niet meer gesorteerd elementen zijn verwisseld. 94 00:05:28,070 --> 00:05:31,920 >> Dus dat zijn twee voorbeelden van sorteren algoritmen die u kunt uitvoeren voor 95 00:05:31,920 --> 00:05:33,230 de vondst programma. 96 00:05:33,230 --> 00:05:37,350 Zodra u klaar bent met sorteren, en je hebt gedaan zoeken, je bent klaar. 97 00:05:37,350 --> 00:05:39,720 Mijn naam is Zamyla, en dit is CS50. 98 00:05:39,720 --> 00:05:46,987 >> [Muziek]