1 00:00:00,000 --> 00:00:08,532 >> [Speel van musiek] 2 00:00:08,532 --> 00:00:12,060 >> ZAMYLA CHAN: Die eerste ding wat jy dalk kennisgewing oor vonds is dat ons reeds 3 00:00:12,060 --> 00:00:13,450 het 'n kode geskryf vir ons. 4 00:00:13,450 --> 00:00:15,160 Dit is die verspreiding kode genoem. 5 00:00:15,160 --> 00:00:18,000 So ons is nie net die skryf van ons eie kode van nuuts af nie. 6 00:00:18,000 --> 00:00:22,800 Inteendeel, is ons in te vul die leemtes in 'n paar pre-bestaande kode. 7 00:00:22,800 --> 00:00:27,790 >> Die find.c program vra vir nommers die hooiberg te vul, soek die 8 00:00:27,790 --> 00:00:32,189 hooiberg vir 'n gebruiker voorgelê naald, en doen dit deur te bel soort en 9 00:00:32,189 --> 00:00:35,590 Soek, funksies gedefinieer in helpers.c. 10 00:00:35,590 --> 00:00:37,670 So find.c is reeds geskryf. 11 00:00:37,670 --> 00:00:40,770 Jou werk is om helpers te skryf. 12 00:00:40,770 --> 00:00:41,870 >> So, wat doen ons? 13 00:00:41,870 --> 00:00:44,210 Ons is die uitvoering van twee funksies. 14 00:00:44,210 --> 00:00:49,030 Soek, wat terugkeer waar as 'n waarde word gevind in die hooiberg, terugkeer 15 00:00:49,030 --> 00:00:51,370 valse indien die waarde is nie in die hooiberg. 16 00:00:51,370 --> 00:00:57,990 En dan is ons ook die implementering van soort wat allerhande die skikking met die naam waardes. 17 00:00:57,990 --> 00:00:59,960 >> So laat se pak soek. 18 00:00:59,960 --> 00:01:04,560 Soek tans geïmplementeer as 'n lineêre soek, maar jy kan baie doen 19 00:01:04,560 --> 00:01:05,550 beter as dit. 20 00:01:05,550 --> 00:01:09,910 Lineêre soektog in O geïmplementeer N tyd, wat baie stadig. 21 00:01:09,910 --> 00:01:13,850 Alhoewel, kan dit soek enige gegewe lys om dit te. 22 00:01:13,850 --> 00:01:20,130 Jou werk is om binêre soek om te implementeer, wat loop tyd O log n. 23 00:01:20,130 --> 00:01:21,130 Dit is redelik vinnig. 24 00:01:21,130 --> 00:01:23,170 >> Maar daar is 'n bepaling. 25 00:01:23,170 --> 00:01:27,600 Binêre soek kan net soek deur pre-gesorteer lyste. 26 00:01:27,600 --> 00:01:30,370 Hoekom is dit? 27 00:01:30,370 --> 00:01:32,620 >> Wel, laat ons kyk na 'n voorbeeld. 28 00:01:32,620 --> 00:01:36,280 Gegewe 'n verskeidenheid van waardes, die hooiberg, ons gaan om te kyk 29 00:01:36,280 --> 00:01:37,130 vir 'n naald. 30 00:01:37,130 --> 00:01:40,460 En in hierdie voorbeeld, Die heelgetal drie. 31 00:01:40,460 --> 00:01:44,130 Die manier waarop binêre soek werk, is dat ons die middelste waarde van vergelyk 32 00:01:44,130 --> 00:01:48,370 die skikking aan die naald, baie soos hoe Ons het 'n telefoonboek oopgemaak om die middel 33 00:01:48,370 --> 00:01:50,660 bladsy in week nul. 34 00:01:50,660 --> 00:01:54,650 >> So na die middelste waarde te vergelyk die naald, kan jy weggooi óf die 35 00:01:54,650 --> 00:01:58,530 linker-of die regter helfte van die skikking deur strenger jou perke. 36 00:01:58,530 --> 00:02:03,390 In hierdie geval, aangesien drie, ons naald, is minder as 10, die middelste waarde, die 37 00:02:03,390 --> 00:02:05,990 reg gebind kan verminder. 38 00:02:05,990 --> 00:02:08,400 Maar probeer om jou grense te maak so styf as moontlik. 39 00:02:08,400 --> 00:02:11,630 As die middelste waarde is nie die naald, dan moet jy weet dat jy nie nodig het om te 40 00:02:11,630 --> 00:02:13,010 sluit dit in jou soektog. 41 00:02:13,010 --> 00:02:17,310 So jy is reg gebind kan draai die Soek perke net 'n klein bietjie meer, 42 00:02:17,310 --> 00:02:21,770 en so aan en so voort totdat jy jou naald. 43 00:02:21,770 --> 00:02:23,480 >> So wat beteken die pseudokode lyk? 44 00:02:23,480 --> 00:02:28,420 Wel, terwyl ons nog steeds deur die lys en nog elemente te hê 45 00:02:28,420 --> 00:02:33,690 kyk in, neem ons die middel van die lys, en vergelyk dat die Midde-waarde 46 00:02:33,690 --> 00:02:34,950 ons naald. 47 00:02:34,950 --> 00:02:37,310 As hulle gelyk is, dan beteken dit dat ons het het gevind dat die naald en ons kan 48 00:02:37,310 --> 00:02:38,990 terug waar. 49 00:02:38,990 --> 00:02:42,870 >> Andersins, as die naald is minder as Die middelste waarde is, dan beteken dit dat ons 50 00:02:42,870 --> 00:02:47,280 kan die regter helfte weggooi, en net soek die linkerkant van die skikking. 51 00:02:47,280 --> 00:02:51,090 Andersins, sal ons soek die regterkant van die skikking. 52 00:02:51,090 --> 00:02:54,410 En aan die einde, as jy het nie meer elemente links te soek, maar jy 53 00:02:54,410 --> 00:02:58,050 nog nie jou naald gevind nie, dan is jy terugkeer valse omdat die naald 54 00:02:58,050 --> 00:03:01,890 beslis nie in die hooiberg. 55 00:03:01,890 --> 00:03:05,270 >> Nou 'n netjiese ding oor hierdie pseudokode in binêre soek is, is dat dit kan wees 56 00:03:05,270 --> 00:03:09,940 geïnterpreteer as óf 'n iteratiewe of rekursiewe implementering. 57 00:03:09,940 --> 00:03:13,810 So is dit rekursiewe sou wees as jy genoem die soek funksie binne die soektog 58 00:03:13,810 --> 00:03:17,350 funksioneer op óf die helfte van die skikking. 59 00:03:17,350 --> 00:03:21,030 Ons sal 'n bietjie later in die dek rekursie Natuurlik, maar weet dat dit 'n 60 00:03:21,030 --> 00:03:24,190 opsie as jy wil om te probeer. 61 00:03:24,190 --> 00:03:26,030 >> Nou laat ons kyk na soort. 62 00:03:26,030 --> 00:03:30,750 Sorteer neem 'n skikking en die heelgetal n, wat is die grootte van die skikking. 63 00:03:30,750 --> 00:03:34,030 Nou is daar verskillende tipes van spesies, en jy kan kyk na 'n paar 64 00:03:34,030 --> 00:03:36,370 kortbroek vir demonstrasies en verduidelikings. 65 00:03:36,370 --> 00:03:39,580 Die opbrengs tipe vir ons soort funksie is nietig. 66 00:03:39,580 --> 00:03:43,580 So dit beteken dat ons nie gaan enige skikking te terugkeer uit sorteer. 67 00:03:43,580 --> 00:03:48,140 Ons is eintlik van plan om die baie verander skikking wat in ons geslaag het. 68 00:03:48,140 --> 00:03:52,290 >> En dit is moontlik omdat skikkings is geslaag deur verwysing in C. Nou sal ons 69 00:03:52,290 --> 00:03:55,290 sien later meer hieroor, maar die essensiële verskil tussen die verbygaan 70 00:03:55,290 --> 00:03:59,340 in iets soos 'n heelgetal en slaag in 'n skikking, is dat wanneer jy 71 00:03:59,340 --> 00:04:03,490 slaag in 'n heelgetal, C is net gaan om te 'n afskrif van die heelgetal en slaag 72 00:04:03,490 --> 00:04:04,450 dit na die funksie. 73 00:04:04,450 --> 00:04:08,530 Die oorspronklike veranderlike sal nie verander word nie Sodra die funksie is klaar. 74 00:04:08,530 --> 00:04:12,480 Met 'n skikking, aan die ander kant, is dit gaan nie 'n kopie te maak, en jy sal 75 00:04:12,480 --> 00:04:17,910 eintlik besig wees baie verskeidenheid self. 76 00:04:17,910 --> 00:04:21,269 >> So 'n tipe van soort is die seleksie soort. 77 00:04:21,269 --> 00:04:24,750 Die keuse soort werk deur te begin by die begin, en dan moet jy Itereer 78 00:04:24,750 --> 00:04:26,820 oor en vind die kleinste element. 79 00:04:26,820 --> 00:04:30,710 En dan moet jy ruil dat kleinste element met die eerste een. 80 00:04:30,710 --> 00:04:34,360 En dan beweeg jy na die tweede element , Vind die volgende kleinste 81 00:04:34,360 --> 00:04:38,320 element, en dan ruil dit met die tweede element in die skikking gevolg 82 00:04:38,320 --> 00:04:41,100 die eerste element is reeds uitgesorteer. 83 00:04:41,100 --> 00:04:45,370 En so dan gaan jy voort vir elke element in die identifisering van die kleinste 84 00:04:45,370 --> 00:04:47,690 waarde en uitruiling dit uit. 85 00:04:47,690 --> 00:04:53,460 >> Want ek is gelyk aan 0, is die heel eerste element om n minus 1, jy gaan te vergelyk 86 00:04:53,460 --> 00:04:57,820 elke volgende waarde na wat en vind Die indeks van die minimum waarde. 87 00:04:57,820 --> 00:05:02,520 Sodra jy die minimum waarde-indeks jy kan daardie waarde van verskeidenheid ruil 88 00:05:02,520 --> 00:05:05,930 minimum en verskeidenheid I. 89 00:05:05,930 --> 00:05:09,760 >> Nog 'n tipe van soort wat jy kan implementeer is borrel soort. 90 00:05:09,760 --> 00:05:14,380 So borrel soort herhaal oor die lys aangrensende elemente en vergelyk 91 00:05:14,380 --> 00:05:17,720 uitruiling die elemente wat is in die verkeerde volgorde. 92 00:05:17,720 --> 00:05:22,380 En op hierdie manier, die grootste element sal borrel tot die einde. 93 00:05:22,380 --> 00:05:28,070 En die lys is weer nie meer gesorteer elemente is omgeruil. 94 00:05:28,070 --> 00:05:31,920 >> So dit is twee voorbeelde van soort algoritmes wat jy kan implementeer vir 95 00:05:31,920 --> 00:05:33,230 die vonds program. 96 00:05:33,230 --> 00:05:37,350 Sodra jy klaar is soort, en jy het gedoen soek, is jy klaar. 97 00:05:37,350 --> 00:05:39,720 My naam is Zamyla, en dit is CS50. 98 00:05:39,720 --> 00:05:46,987 >> [Speel van musiek]