1 00:00:00,000 --> 00:00:08,532 >> [Musikk spilles] 2 00:00:08,532 --> 00:00:12,060 >> ZAMYLA CHAN: Det første du kanskje varsel om funn er at vi allerede 3 00:00:12,060 --> 00:00:13,450 har kode som er skrevet for oss. 4 00:00:13,450 --> 00:00:15,160 Dette kalles fordelingskode. 5 00:00:15,160 --> 00:00:18,000 Så vi ikke bare skriver vår egen kode fra scratch lenger. 6 00:00:18,000 --> 00:00:22,800 Snarere er vi fylle tomrom i en pre-eksisterende kode. 7 00:00:22,800 --> 00:00:27,790 >> Den find.c program ber om tall å fylle høystakken, søker den 8 00:00:27,790 --> 00:00:32,189 høystakk for en bruker sendt nål, og det gjør dette ved å ringe sortere og 9 00:00:32,189 --> 00:00:35,590 søk, funksjoner definert i helpers.c. 10 00:00:35,590 --> 00:00:37,670 Så find.c er skrevet allerede. 11 00:00:37,670 --> 00:00:40,770 Din jobb er å skrive hjelpere. 12 00:00:40,770 --> 00:00:41,870 >> Så hva gjør vi? 13 00:00:41,870 --> 00:00:44,210 Vi implementere to funksjoner. 14 00:00:44,210 --> 00:00:49,030 Søk, som returnerer true hvis en verdi er funnet i høystakken, retur 15 00:00:49,030 --> 00:00:51,370 usann hvis verdien er ikke i høystakken. 16 00:00:51,370 --> 00:00:57,990 Og så er vi også implementere slags som sorterer tabellen kalt verdier. 17 00:00:57,990 --> 00:00:59,960 >> Så la oss takle søk. 18 00:00:59,960 --> 00:01:04,560 Søk er i dag implementert som en lineær søk, men du kan gjøre mye 19 00:01:04,560 --> 00:01:05,550 bedre enn det. 20 00:01:05,550 --> 00:01:09,910 Lineær søk er implementert i O n tid, noe som er ganske langsom. 21 00:01:09,910 --> 00:01:13,850 Selv om det kan søke noen liste gitt til det. 22 00:01:13,850 --> 00:01:20,130 Din jobb er å implementere binære søk, som har kjøretid O av log n. 23 00:01:20,130 --> 00:01:21,130 Det er ganske fort. 24 00:01:21,130 --> 00:01:23,170 >> Men det er en fastsettelse. 25 00:01:23,170 --> 00:01:27,600 Binære søk kan bare søke gjennom pre-sorterte lister. 26 00:01:27,600 --> 00:01:30,370 Hvorfor er det? 27 00:01:30,370 --> 00:01:32,620 >> Vel la oss se på et eksempel. 28 00:01:32,620 --> 00:01:36,280 Gitt en matrise med verdier, høystakken, vi kommer til å være ute 29 00:01:36,280 --> 00:01:37,130 en nål. 30 00:01:37,130 --> 00:01:40,460 Og i dette eksempelet, heltallet tre. 31 00:01:40,460 --> 00:01:44,130 Måten binære søk fungerer er at Sammenligner vi den midterste verdien av 32 00:01:44,130 --> 00:01:48,370 matrisen til nålen, mye som hvordan vi åpnet en telefonliste til midten 33 00:01:48,370 --> 00:01:50,660 side i uke null. 34 00:01:50,660 --> 00:01:54,650 >> Så etter å sammenligne den midterste verdien til nålen, kan du forkaste enten 35 00:01:54,650 --> 00:01:58,530 venstre eller høyre halvdel av matrisen ved å stramme grenser. 36 00:01:58,530 --> 00:02:03,390 I dette tilfelle, siden tre, vår p, er mindre enn 10, den midterste verdien, den 37 00:02:03,390 --> 00:02:05,990 høyre grense kan reduseres. 38 00:02:05,990 --> 00:02:08,400 Men prøv å gjøre dine grenser så stramt som mulig. 39 00:02:08,400 --> 00:02:11,630 Hvis den midterste verdien ikke nålen da vet du at du ikke trenger å 40 00:02:11,630 --> 00:02:13,010 inkludere det i søket. 41 00:02:13,010 --> 00:02:17,310 Så du har rett bundet kan stramme søke grensene bare en liten bit mer, 42 00:02:17,310 --> 00:02:21,770 og så videre og så videre inntil du finne nålen. 43 00:02:21,770 --> 00:02:23,480 >> Så hva betyr det pseudo se ut? 44 00:02:23,480 --> 00:02:28,420 Vel mens vi fortsatt leter gjennom listen og har fortsatt elementer til 45 00:02:28,420 --> 00:02:33,690 ser på, tar vi midt på listen, og sammenligne det midterste verdien til 46 00:02:33,690 --> 00:02:34,950 vår nål. 47 00:02:34,950 --> 00:02:37,310 Hvis de er like, så det betyr at vi har funnet nålen og vi kan 48 00:02:37,310 --> 00:02:38,990 returnere true. 49 00:02:38,990 --> 00:02:42,870 >> Ellers, hvis nålen er mindre enn den midterste verdien, så det betyr at vi 50 00:02:42,870 --> 00:02:47,280 kan forkaste høyre halvdel, og bare søk på venstre side av tabellen. 51 00:02:47,280 --> 00:02:51,090 Ellers vil vi søke høyre side av tabellen. 52 00:02:51,090 --> 00:02:54,410 Og på slutten, hvis du ikke har noen flere elementer igjen å søke, men du 53 00:02:54,410 --> 00:02:58,050 har ikke funnet din nål ennå, så du return false fordi nålen 54 00:02:58,050 --> 00:03:01,890 definitivt er ikke i høystakken. 55 00:03:01,890 --> 00:03:05,270 >> Nå er en fin ting om dette pseudo i binær-søk er at det kan være 56 00:03:05,270 --> 00:03:09,940 tolkes enten en iterativ eller rekursiv gjennomføring. 57 00:03:09,940 --> 00:03:13,810 Så det ville være rekursiv hvis du heter søkefunksjonen i søket 58 00:03:13,810 --> 00:03:17,350 fungere på hver halvdel av matrisen. 59 00:03:17,350 --> 00:03:21,030 Vi dekker rekursjon litt senere i selvfølgelig, men vet at det er en 60 00:03:21,030 --> 00:03:24,190 alternativ hvis du ønsker å prøve. 61 00:03:24,190 --> 00:03:26,030 >> Nå la oss se på liksom. 62 00:03:26,030 --> 00:03:30,750 Sorter tar en matrise og heltallet n, som er på størrelse med matrisen. 63 00:03:30,750 --> 00:03:34,030 Nå er det ulike typer av former, og du kan se på noen 64 00:03:34,030 --> 00:03:36,370 shorts for demoer og forklaringer. 65 00:03:36,370 --> 00:03:39,580 Returtypen for vår sorteringsfunksjonen er ugyldig. 66 00:03:39,580 --> 00:03:43,580 Så det betyr at vi ikke kommer å returnere noen utvalg fra slag. 67 00:03:43,580 --> 00:03:48,140 Vi blir faktisk kommer til å endre selve array som ble vedtatt i oss. 68 00:03:48,140 --> 00:03:52,290 >> Og det er mulig fordi arrays er vedtatt ved referanse i C. Nå vil vi 69 00:03:52,290 --> 00:03:55,290 se mer om dette senere, men vesentlig forskjell mellom bestått 70 00:03:55,290 --> 00:03:59,340 i noe sånt som et heltall og bestått i en matrise, er at når du 71 00:03:59,340 --> 00:04:03,490 passere i et heltall, er C bare kommer til å lage en kopi av som heltall og bestå 72 00:04:03,490 --> 00:04:04,450 det for funksjonen. 73 00:04:04,450 --> 00:04:08,530 Den opprinnelige variabelen vil ikke endres når funksjonen er avsluttet. 74 00:04:08,530 --> 00:04:12,480 Med en matrise, på den annen side, er det ikke kommer til å lage en kopi, og du vil 75 00:04:12,480 --> 00:04:17,910 faktisk være å redigere veldig matrise seg selv. 76 00:04:17,910 --> 00:04:21,269 >> Så en type slag er utvalget slag. 77 00:04:21,269 --> 00:04:24,750 Utvalget slags fungerer ved å starte på begynnelsen, og deretter du reagere 78 00:04:24,750 --> 00:04:26,820 over og finne det minste elementet. 79 00:04:26,820 --> 00:04:30,710 Og så du bytte det minste elementet med den første. 80 00:04:30,710 --> 00:04:34,360 Og så du flytter til det andre elementet , Finner neste minste 81 00:04:34,360 --> 00:04:38,320 element, og deretter bytte den med den andre elementet i matrisen på grunn 82 00:04:38,320 --> 00:04:41,100 det første element allerede er sortert. 83 00:04:41,100 --> 00:04:45,370 Og så så du fortsetter for hver element i å identifisere den minste 84 00:04:45,370 --> 00:04:47,690 verdi og bytte den ut. 85 00:04:47,690 --> 00:04:53,460 >> For jeg er lik 0, den aller første elementet til n minus en, kommer du til å sammenligne 86 00:04:53,460 --> 00:04:57,820 hver neste verdi etter det og finne indeksen av minimumsverdi. 87 00:04:57,820 --> 00:05:02,520 Når du finner den laveste verdien indeksen, du kan bytte at verdien av matrise 88 00:05:02,520 --> 00:05:05,930 minimum og rekke I. 89 00:05:05,930 --> 00:05:09,760 >> En annen type slag som du kan implementere er boble slag. 90 00:05:09,760 --> 00:05:14,380 Så boble sorterings gjentas over listen sammenligne tilstøtende elementer og 91 00:05:14,380 --> 00:05:17,720 bytte de elementene som er i feil rekkefølge. 92 00:05:17,720 --> 00:05:22,380 Og på denne måten, det største elementet vil boble ut til enden. 93 00:05:22,380 --> 00:05:28,070 Og listen er sortert gang ikke mer elementer har blitt byttet. 94 00:05:28,070 --> 00:05:31,920 >> Så de er to eksempler på slag algoritmer som du kan gjennomføre for 95 00:05:31,920 --> 00:05:33,230 Finn-programmet. 96 00:05:33,230 --> 00:05:37,350 Når du er ferdig med slag, og du har gjort søk, du er ferdig. 97 00:05:37,350 --> 00:05:39,720 Mitt navn er Zamyla, og dette er CS50. 98 00:05:39,720 --> 00:05:46,987 >> [Musikk spilles]