1 00:00:00,000 --> 00:00:08,532 >> [Musikgengivelse] 2 00:00:08,532 --> 00:00:12,060 >> ZAMYLA CHAN: Den første ting du måske bekendtgørelse om fund er, at vi allerede 3 00:00:12,060 --> 00:00:13,450 have kode skrevet til os. 4 00:00:13,450 --> 00:00:15,160 Dette kaldes fordeling kode. 5 00:00:15,160 --> 00:00:18,000 Så vi ikke bare skrive vores egen kode fra bunden længere. 6 00:00:18,000 --> 00:00:22,800 Snarere, vi udfylder hulrum i nogle eksisterende kode. 7 00:00:22,800 --> 00:00:27,790 >> Det find.c programmet beder for tal at fylde høstak, søger 8 00:00:27,790 --> 00:00:32,189 høstak for en bruger indsendte nål, og det gør dette ved at kalde sortere og 9 00:00:32,189 --> 00:00:35,590 søgning, funktioner defineret 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 Dit job er at skrive hjælpere. 12 00:00:40,770 --> 00:00:41,870 >> Så hvad gør vi? 13 00:00:41,870 --> 00:00:44,210 Vi gennemføre to funktioner. 14 00:00:44,210 --> 00:00:49,030 Søg, som returnerer true, hvis en værdi er fundet i høstakken, vender tilbage 15 00:00:49,030 --> 00:00:51,370 falsk, hvis værdien er ikke i høstakken. 16 00:00:51,370 --> 00:00:57,990 Og så er vi også gennemføre slags som sorterer array kaldet værdier. 17 00:00:57,990 --> 00:00:59,960 >> Så lad os tage fat søgning. 18 00:00:59,960 --> 00:01:04,560 Søg i øjeblikket gennemføres som et lineær søgning, men du kan gøre meget 19 00:01:04,560 --> 00:01:05,550 bedre end det. 20 00:01:05,550 --> 00:01:09,910 Lineær søgning er implementeret i O n tid, hvilket er ganske langsomt. 21 00:01:09,910 --> 00:01:13,850 Selv kan den søge enhver liste, det fik. 22 00:01:13,850 --> 00:01:20,130 Dit job er at implementere binær søgning, der har kørt tid O af log n. 23 00:01:20,130 --> 00:01:21,130 Det er temmelig hurtigt. 24 00:01:21,130 --> 00:01:23,170 >> Men der er en bestemmelse. 25 00:01:23,170 --> 00:01:27,600 Binær søgning kan kun søge gennem pre-sorterede lister. 26 00:01:27,600 --> 00:01:30,370 Hvorfor er det? 27 00:01:30,370 --> 00:01:32,620 >> Jamen så lad os se på et eksempel. 28 00:01:32,620 --> 00:01:36,280 I betragtning af en matrix af værdier, høstak, vi kommer til at være på udkig 29 00:01:36,280 --> 00:01:37,130 efter en nål. 30 00:01:37,130 --> 00:01:40,460 Og i dette eksempel, heltallet tre. 31 00:01:40,460 --> 00:01:44,130 Den måde, at binær søgning værker er, at Sammenligner vi den midterste værdi af 32 00:01:44,130 --> 00:01:48,370 array til nålen, meget gerne, hvordan åbnede vi en telefonbog til midten 33 00:01:48,370 --> 00:01:50,660 side i uge nul. 34 00:01:50,660 --> 00:01:54,650 >> Så efter sammenligning af den midterste værdi til nålen, kan du kassere enten 35 00:01:54,650 --> 00:01:58,530 venstre eller højre halvdel af array ved at stramme dine grænser. 36 00:01:58,530 --> 00:02:03,390 I dette tilfælde, da tre vores nål, er mindre end 10, den midterste værdi, 37 00:02:03,390 --> 00:02:05,990 højre bundet kan falde. 38 00:02:05,990 --> 00:02:08,400 Men prøv at gøre dine grænser så stramt som muligt. 39 00:02:08,400 --> 00:02:11,630 Hvis den midterste værdi ikke er den nål, så ved du at du ikke behøver at 40 00:02:11,630 --> 00:02:13,010 medtage den i din søgning. 41 00:02:13,010 --> 00:02:17,310 Så du har ret bundet kan stramme den søgning bounds bare en lille smule mere, 42 00:02:17,310 --> 00:02:21,770 og så videre og så videre, indtil du finder din nål. 43 00:02:21,770 --> 00:02:23,480 >> Så hvad betyder det pseudokode se ud? 44 00:02:23,480 --> 00:02:28,420 Nå, mens vi stadig kigger gennem listen og stadig have elementer til 45 00:02:28,420 --> 00:02:33,690 kigge i, tager vi midt på listen, og sammenligne det midterste værdi til 46 00:02:33,690 --> 00:02:34,950 vores nål. 47 00:02:34,950 --> 00:02:37,310 Hvis de er lige, så det betyder, at vi har fundet nålen og vi kan 48 00:02:37,310 --> 00:02:38,990 returnere sandt. 49 00:02:38,990 --> 00:02:42,870 >> Ellers, hvis nålen er mindre end den midterste værdi, så det betyder, at vi 50 00:02:42,870 --> 00:02:47,280 kan skille den højre halvdel, og lige søge i venstre side af matrixen. 51 00:02:47,280 --> 00:02:51,090 Ellers vil vi søge højre side af matrixen. 52 00:02:51,090 --> 00:02:54,410 Og til sidst, hvis du ikke har nogen flere elementer tilbage til søgning, men du 53 00:02:54,410 --> 00:02:58,050 har ikke fundet nålen endnu, så du return false fordi nålen 54 00:02:58,050 --> 00:03:01,890 absolut ikke er i høstakken. 55 00:03:01,890 --> 00:03:05,270 >> Nu er en pæn ting om dette pseudokode i binær søgning er, at det kan være 56 00:03:05,270 --> 00:03:09,940 tolkes enten en iterativ eller rekursive gennemførelse. 57 00:03:09,940 --> 00:03:13,810 Så det ville være rekursiv hvis du kaldte søgefunktionen i søgningen 58 00:03:13,810 --> 00:03:17,350 kan fungere på hver halvdel af matrixen. 59 00:03:17,350 --> 00:03:21,030 Vi dækker rekursion lidt senere i naturligvis, men ved, at det er et 60 00:03:21,030 --> 00:03:24,190 mulighed, hvis du gerne vil prøve. 61 00:03:24,190 --> 00:03:26,030 >> Lad os nu se på slags. 62 00:03:26,030 --> 00:03:30,750 Sorter tager et array og heltal n, som er størrelsen af ​​matrixen. 63 00:03:30,750 --> 00:03:34,030 Nu er der forskellige typer slags, og du kan se på nogle 64 00:03:34,030 --> 00:03:36,370 shorts til demoer og forklaringer. 65 00:03:36,370 --> 00:03:39,580 Afkastet type til vores slags funktion er ugyldig. 66 00:03:39,580 --> 00:03:43,580 Så det betyder, at vi ikke kommer at returnere eventuelle vifte af slags. 67 00:03:43,580 --> 00:03:48,140 Vi er faktisk kommer til at ændre den meget array, der blev vedtaget i os. 68 00:03:48,140 --> 00:03:52,290 >> Og det er muligt, fordi arrays er sendes som reference i C. Nu vil vi 69 00:03:52,290 --> 00:03:55,290 se mere om dette senere, men væsentlig forskel mellem forbigående 70 00:03:55,290 --> 00:03:59,340 i noget som et heltal og passerer i et array, er, at når du 71 00:03:59,340 --> 00:04:03,490 passere i et heltal, C bare kommer til at lave en kopi af heltal og videregive 72 00:04:03,490 --> 00:04:04,450 det til funktionen. 73 00:04:04,450 --> 00:04:08,530 Den oprindelige variabel vil ikke blive ændret når funktionen er færdig. 74 00:04:08,530 --> 00:04:12,480 Med et array på den anden side er det ikke kommer til at lave en kopi, og du vil 75 00:04:12,480 --> 00:04:17,910 faktisk redigere meget matrix selv. 76 00:04:17,910 --> 00:04:21,269 >> Så en form for sortering er udvælgelse slags. 77 00:04:21,269 --> 00:04:24,750 Udvælgelsen sortere fungerer ved at starte på starten, og så skal du gentage 78 00:04:24,750 --> 00:04:26,820 igen og finde det mindste element. 79 00:04:26,820 --> 00:04:30,710 Og så skal du bytte at mindste elementet med den første. 80 00:04:30,710 --> 00:04:34,360 Og så skal du flytte til det andet element Finder den næstmindste 81 00:04:34,360 --> 00:04:38,320 element og derefter swap at med andet element i array, fordi 82 00:04:38,320 --> 00:04:41,100 det første element allerede er sorteret. 83 00:04:41,100 --> 00:04:45,370 Og så så du fortsætter til hver element i at identificere den mindste 84 00:04:45,370 --> 00:04:47,690 værdi og bytte det ud. 85 00:04:47,690 --> 00:04:53,460 >> For jeg er lig med 0, det allerførste element til n minus 1, er du nødt til at sammenligne 86 00:04:53,460 --> 00:04:57,820 hver næste værdi efter det og finde indekset for den mindste værdi. 87 00:04:57,820 --> 00:05:02,520 Når du finder den mindste værdi indekset, du kan bytte, at værdien af ​​matrix 88 00:05:02,520 --> 00:05:05,930 minimum og matrix I. 89 00:05:05,930 --> 00:05:09,760 >> En anden type af slags, som du kan redskabet er boble slags. 90 00:05:09,760 --> 00:05:14,380 Så boble sortere gentager over listen sammenligning af tilstødende elementer og 91 00:05:14,380 --> 00:05:17,720 bytte de elementer, der er i den forkerte rækkefølge. 92 00:05:17,720 --> 00:05:22,380 Og på denne måde, det største element vil boble til enden. 93 00:05:22,380 --> 00:05:28,070 Og listen er sorteret engang ikke mere elementer er blevet byttet. 94 00:05:28,070 --> 00:05:31,920 >> Så det er to eksempler på sortering algoritmer, som du kan gennemføre for 95 00:05:31,920 --> 00:05:33,230 Find programmet. 96 00:05:33,230 --> 00:05:37,350 Når du er færdig sortere, og du har gjort søgning, er du færdig. 97 00:05:37,350 --> 00:05:39,720 Mit navn er Zamyla, og det er CS50. 98 00:05:39,720 --> 00:05:46,987 >> [Musikgengivelse]