1 00:00:00,000 --> 00:00:08,532 >> [MUSIK SPELA] 2 00:00:08,532 --> 00:00:12,060 >> ZAMYLA CHAN: Det första du kanske meddelande om fyndet är att vi redan 3 00:00:12,060 --> 00:00:13,450 har kod skriven för oss. 4 00:00:13,450 --> 00:00:15,160 Detta kallas distributionskoden. 5 00:00:15,160 --> 00:00:18,000 Så vi inte bara skriva vår egen koda från grunden längre. 6 00:00:18,000 --> 00:00:22,800 I stället ska vi fylla i tomrummen i någon befintlig kod. 7 00:00:22,800 --> 00:00:27,790 >> Den find.c Programmet frågar efter siffror att fylla höstacken, söker 8 00:00:27,790 --> 00:00:32,189 höstack för en användare lämnade nål, och den gör det genom att ringa sortera och 9 00:00:32,189 --> 00:00:35,590 sökning, funktioner definierade i helpers.c. 10 00:00:35,590 --> 00:00:37,670 Så find.c är redan skrivet. 11 00:00:37,670 --> 00:00:40,770 Ditt jobb är att skriva hjälpare. 12 00:00:40,770 --> 00:00:41,870 >> Så vad gör vi? 13 00:00:41,870 --> 00:00:44,210 Vi ska genomföra två funktioner. 14 00:00:44,210 --> 00:00:49,030 Sök, som returnerar true om ett värde påträffas i höstacken, återvänder 15 00:00:49,030 --> 00:00:51,370 false om värdet är inte i höstacken. 16 00:00:51,370 --> 00:00:57,990 Och då vi genomför också sortera som sorterar arrayen kallas värden. 17 00:00:57,990 --> 00:00:59,960 >> Så låt oss ta itu sökning. 18 00:00:59,960 --> 00:01:04,560 Sök för närvarande genomförs som en linjär sökning, men du kan göra mycket 19 00:01:04,560 --> 00:01:05,550 bättre än så. 20 00:01:05,550 --> 00:01:09,910 Linjär sökning genomförs i O n tid, vilket är ganska långsam. 21 00:01:09,910 --> 00:01:13,850 Även om, kan det söka någon lista som ges till det. 22 00:01:13,850 --> 00:01:20,130 Ditt jobb är att implementera binär sökning, som har körtid O i log n. 23 00:01:20,130 --> 00:01:21,130 Det är ganska snabbt. 24 00:01:21,130 --> 00:01:23,170 >> Men det finns en bestämmelse. 25 00:01:23,170 --> 00:01:27,600 Binär sökning kan endast söka genom pre-sorterade listor. 26 00:01:27,600 --> 00:01:30,370 Varför är det? 27 00:01:30,370 --> 00:01:32,620 >> Nåväl låt oss titta på ett exempel. 28 00:01:32,620 --> 00:01:36,280 Givet en matris med värden, höstacken, vi kommer att vara ute 29 00:01:36,280 --> 00:01:37,130 för en nål. 30 00:01:37,130 --> 00:01:40,460 Och i detta exempel, heltalet tre. 31 00:01:40,460 --> 00:01:44,130 Det sätt som binär sökning fungerar är att vi jämför det mittersta värdet av 32 00:01:44,130 --> 00:01:48,370 arrayen till nålen, ungefär som hur Vi öppnade en telefonbok till mitten 33 00:01:48,370 --> 00:01:50,660 sida i vecka noll. 34 00:01:50,660 --> 00:01:54,650 >> Så efter att ha jämfört det mittersta värdet till nålen, kan du kasta antingen 35 00:01:54,650 --> 00:01:58,530 vänstra eller den högra halvan av matrisen genom att dra dina gränser. 36 00:01:58,530 --> 00:02:03,390 I det här fallet, sedan tre, vår nål, är mindre än 10, det mittersta värdet, den 37 00:02:03,390 --> 00:02:05,990 rätt bunden kan minska. 38 00:02:05,990 --> 00:02:08,400 Men försök att göra dina gränser så tätt som möjligt. 39 00:02:08,400 --> 00:02:11,630 Om det mittersta värdet är inte av nålen, då vet du att du inte behöver 40 00:02:11,630 --> 00:02:13,010 inkludera det i din sökning. 41 00:02:13,010 --> 00:02:17,310 Så du har rätt bunden kan dra åt sökning bounds bara en liten bit mer, 42 00:02:17,310 --> 00:02:21,770 och så vidare och så vidare till dess att du hittar din nål. 43 00:02:21,770 --> 00:02:23,480 >> Så vad pseudokod ut? 44 00:02:23,480 --> 00:02:28,420 Väl när vi letar fortfarande igenom listan och fortfarande har element till 45 00:02:28,420 --> 00:02:33,690 titta in, tar vi i mitten av listan, och jämför det mittersta värdet till 46 00:02:33,690 --> 00:02:34,950 vår nål. 47 00:02:34,950 --> 00:02:37,310 Om de är lika, då det innebär att vi har hittade nålen och vi kan 48 00:02:37,310 --> 00:02:38,990 return true. 49 00:02:38,990 --> 00:02:42,870 >> Annars, om nålen är mindre än det mittersta värdet, då det innebär att vi 50 00:02:42,870 --> 00:02:47,280 kan kasta den högra halvan, och bara söka den vänstra sidan av matrisen. 51 00:02:47,280 --> 00:02:51,090 I annat fall kommer vi att söka på höger sida av kedjan. 52 00:02:51,090 --> 00:02:54,410 Och i slutet, om du inte har några fler element kvar att söka, men du 53 00:02:54,410 --> 00:02:58,050 har inte hittat din nål ännu, då du return false eftersom nålen 54 00:02:58,050 --> 00:03:01,890 definitivt inte i höstacken. 55 00:03:01,890 --> 00:03:05,270 >> Nu en snygg sak om denna pseudo i binär sökning är att det kan vara 56 00:03:05,270 --> 00:03:09,940 tolkas som antingen en iterativ eller rekursiv genomförande. 57 00:03:09,940 --> 00:03:13,810 Så det skulle vara rekursiv om du heter sökfunktionen i sökandet 58 00:03:13,810 --> 00:03:17,350 fungera på vardera halvan av matrisen. 59 00:03:17,350 --> 00:03:21,030 Vi täcker rekursion lite senare i naturligtvis, men vet att det är en 60 00:03:21,030 --> 00:03:24,190 alternativet om du vill prova. 61 00:03:24,190 --> 00:03:26,030 >> Nu ska vi titta på sort. 62 00:03:26,030 --> 00:03:30,750 Sortera tar en matris och heltalet n, vilket är storleken på matrisen. 63 00:03:30,750 --> 00:03:34,030 Nu finns det flera olika typer av slag, och du kan titta på några 64 00:03:34,030 --> 00:03:36,370 shorts för demos och förklaringar. 65 00:03:36,370 --> 00:03:39,580 Retur typ för vår sorteringsfunktionen är ogiltig. 66 00:03:39,580 --> 00:03:43,580 Så det betyder att vi inte kommer att återvända någon array från slag. 67 00:03:43,580 --> 00:03:48,140 Vi ska faktiskt går att förändra mycket array som leddes in oss. 68 00:03:48,140 --> 00:03:52,290 >> Och det är möjligt eftersom arrayer är passerade genom hänvisning i C. Nu ska vi 69 00:03:52,290 --> 00:03:55,290 se mer om detta senare, men det väsentlig skillnad mellan passerande 70 00:03:55,290 --> 00:03:59,340 i något som liknar ett heltal och passerar i en matris, är att när man 71 00:03:59,340 --> 00:04:03,490 passera i ett heltal, är C bara att göra en kopia av detta heltal och passera 72 00:04:03,490 --> 00:04:04,450 det till funktionen. 73 00:04:04,450 --> 00:04:08,530 Den ursprungliga variabeln ändras inte när funktionen är slutförd. 74 00:04:08,530 --> 00:04:12,480 Med en array, å andra sidan, är det inte att göra en kopia, och du kommer 75 00:04:12,480 --> 00:04:17,910 faktiskt redigera mycket array själv. 76 00:04:17,910 --> 00:04:21,269 >> Så en typ av slag är urvals sort. 77 00:04:21,269 --> 00:04:24,750 Valet sortera fungerar genom att starta vid början, och sedan iterera 78 00:04:24,750 --> 00:04:26,820 över och hitta det minsta elementet. 79 00:04:26,820 --> 00:04:30,710 Och sedan byta det minsta element med den första. 80 00:04:30,710 --> 00:04:34,360 Och då du flyttar till det andra elementet , Hitta den näst minsta 81 00:04:34,360 --> 00:04:38,320 elementet, och sedan byta den med andra element i arrayen eftersom 82 00:04:38,320 --> 00:04:41,100 det första elementet är redan sorterade. 83 00:04:41,100 --> 00:04:45,370 Och så då fortsätter för varje elementet i att identifiera den minsta 84 00:04:45,370 --> 00:04:47,690 värde och byta ut den. 85 00:04:47,690 --> 00:04:53,460 >> För jag är lika med 0, den allra första elementet till n minus 1, du kommer att jämföra 86 00:04:53,460 --> 00:04:57,820 varje nästa värde efter det och hitta indexet för det minsta värdet. 87 00:04:57,820 --> 00:05:02,520 När du hittar det minsta värdet index, du kan byta det värdet av array 88 00:05:02,520 --> 00:05:05,930 minimum och array I. 89 00:05:05,930 --> 00:05:09,760 >> En annan typ av slag som du kan genomföra är bubbla sortera. 90 00:05:09,760 --> 00:05:14,380 Så bubbla sortera itererar över listan jämföra intilliggande element och 91 00:05:14,380 --> 00:05:17,720 byta de delar som är i fel ordning. 92 00:05:17,720 --> 00:05:22,380 Och på detta sätt, det största elementet kommer bubbla till slutet. 93 00:05:22,380 --> 00:05:28,070 Och listan sorteras en gång inte mer delar har bytts. 94 00:05:28,070 --> 00:05:31,920 >> Så de är två exempel på slag algoritmer som du kan genomföra för 95 00:05:31,920 --> 00:05:33,230 fyndet programmet. 96 00:05:33,230 --> 00:05:37,350 När du är klar sorterar, och du har gjort sökningen, är du klar. 97 00:05:37,350 --> 00:05:39,720 Mitt namn är Zamyla, och detta är CS50. 98 00:05:39,720 --> 00:05:46,987 >> [MUSIK SPELA]