1 00:00:00,000 --> 00:00:08,532 >> [Muzikavimo] 2 00:00:08,532 --> 00:00:12,060 >> ZAMYLA CHAN: pirmas dalykas, kurį galėtų pranešimas apie radinį, kad mes jau 3 00:00:12,060 --> 00:00:13,450 yra kodas parašyta mums. 4 00:00:13,450 --> 00:00:15,160 Tai vadinama platinimo kodas. 5 00:00:15,160 --> 00:00:18,000 Taigi mes ne tik raštu mūsų pačių Kodas iš nulio nebėra. 6 00:00:18,000 --> 00:00:22,800 Atvirkščiai, mes užpildant ertmes kai iš anksto esamą kodą. 7 00:00:22,800 --> 00:00:27,790 >> Find.c programa paragina numerius užpildyti kaugė, ieško 8 00:00:27,790 --> 00:00:32,189 kaugė vartotojo pateikta adata, ir tai daroma telefonu rūšiuoti ir 9 00:00:32,189 --> 00:00:35,590 ieškoti, funkcijos apibrėžtos į helpers.c. 10 00:00:35,590 --> 00:00:37,670 Taigi find.c parašyta jau. 11 00:00:37,670 --> 00:00:40,770 Jūsų darbas yra rašyti pagalbininkai. 12 00:00:40,770 --> 00:00:41,870 >> Taigi, ką mes darome? 13 00:00:41,870 --> 00:00:44,210 Mes įgyvendinti dvi funkcijas. 14 00:00:44,210 --> 00:00:49,030 Paieška, kuri grąžina true, jei vertė randama šieno kupetoje, grįžta 15 00:00:49,030 --> 00:00:51,370 false, jei reikšmė yra ne kaugė. 16 00:00:51,370 --> 00:00:57,990 Ir tada mes taip pat įgyvendinant rūšiuoti kuri rūšiuoja masyvas vadinamas vertės. 17 00:00:57,990 --> 00:00:59,960 >> Taigi galime spręsti paiešką. 18 00:00:59,960 --> 00:01:04,560 Paieška šiuo metu įgyvendinama kaip linijinis paieška, bet jūs galite padaryti daug 19 00:01:04,560 --> 00:01:05,550 geriau nei tai. 20 00:01:05,550 --> 00:01:09,910 Linijinis paieška įgyvendinama O n metu, kuris yra gana lėtas. 21 00:01:09,910 --> 00:01:13,850 Nors ji gali ieškoti bet sąrašas duota. 22 00:01:13,850 --> 00:01:20,130 Jūsų darbas yra įgyvendinti dvejetainis paieškos, kuri skaičiuoti laiką O log n. 23 00:01:20,130 --> 00:01:21,130 Tai gana greitai. 24 00:01:21,130 --> 00:01:23,170 >> Tačiau yra nuostata. 25 00:01:23,170 --> 00:01:27,600 Dvejetainiai paieškos gali ieškoti tik per surūšiuotas sąrašus. 26 00:01:27,600 --> 00:01:30,370 Kodėl taip yra? 27 00:01:30,370 --> 00:01:32,620 >> Na pažvelkime pavyzdys. 28 00:01:32,620 --> 00:01:36,280 Atsižvelgiant vertybių masyvas, kaugė, mes ketiname būti ieškote 29 00:01:36,280 --> 00:01:37,130 Pereiti prie adatos. 30 00:01:37,130 --> 00:01:40,460 Ir šiame pavyzdyje, sveikasis skaičius trys. 31 00:01:40,460 --> 00:01:44,130 Taip, kad dvejetainis paieška veikia tai, kad mes palyginti vidurinį vertę 32 00:01:44,130 --> 00:01:48,370 masyvas adata, panašiai kaip mes atidarėme knygutę į vidurį 33 00:01:48,370 --> 00:01:50,660 puslapis nulio savaitę. 34 00:01:50,660 --> 00:01:54,650 >> Taigi palyginus vidurinį vertę adata, galite išmesti arba 35 00:01:54,650 --> 00:01:58,530 kairę arba į dešinę pusę masyvo veržiant savo ribas. 36 00:01:58,530 --> 00:02:03,390 Šiuo atveju, nes trys, mūsų adata, yra mažesnis nei 10, vidurinioji vertė, 37 00:02:03,390 --> 00:02:05,990 teisė riba gali sumažėti. 38 00:02:05,990 --> 00:02:08,400 Bet pabandyti padaryti savo ribas taip griežtai, kaip įmanoma. 39 00:02:08,400 --> 00:02:11,630 Jei vidurinioji vertė yra ne adata, tuomet jūs žinote, kad jums nereikia 40 00:02:11,630 --> 00:02:13,010 įtraukti jį į savo paiešką. 41 00:02:13,010 --> 00:02:17,310 Taigi tu teisus jungiasi gali sugriežtinti Paieškos ribų Truputėlį daugiau, 42 00:02:17,310 --> 00:02:21,770 ir taip toliau ir taip toliau, kol jums rasti adatą. 43 00:02:21,770 --> 00:02:23,480 >> Taigi, ką Pseudocode atrodo? 44 00:02:23,480 --> 00:02:28,420 Na, o mes vis dar ieško per sąrašas ir dar elementai 45 00:02:28,420 --> 00:02:33,690 ieškoti, mes vidurį sąrašo ir palyginkite, kad vidurinės vertę 46 00:02:33,690 --> 00:02:34,950 mūsų adata. 47 00:02:34,950 --> 00:02:37,310 Jei jie vienodi, tada tai reiškia, kad mes rasti adatą ir mes galime 48 00:02:37,310 --> 00:02:38,990 return true. 49 00:02:38,990 --> 00:02:42,870 >> Priešingu atveju, jei adata yra mažesnis nei vidutinio vertė, tai reiškia, kad mes 50 00:02:42,870 --> 00:02:47,280 gali atmesti teisingą pusę, ir tik ieškoti kairėje pusėje masyvo. 51 00:02:47,280 --> 00:02:51,090 Priešingu atveju, mes ieškoti Dešinėje pusėje masyvo. 52 00:02:51,090 --> 00:02:54,410 Ir pabaigoje, jei jūs neturite daugiau elementų paliko ieškoti bet jūs 53 00:02:54,410 --> 00:02:58,050 neradau savo adatą dar, tada jūs return false, nes adata 54 00:02:58,050 --> 00:03:01,890 tikrai nėra šieno kupetoje. 55 00:03:01,890 --> 00:03:05,270 >> Dabar tvarkingas dalykas apie šį Pseudocode dvejetainėje paieškos yra tai, kad jis gali būti 56 00:03:05,270 --> 00:03:09,940 aiškinama kaip arba kartotinis arba grįžtamojo įgyvendinimas. 57 00:03:09,940 --> 00:03:13,810 Taigi būtų grįžtamojo jei vadinamas paieškos funkcija per paiešką 58 00:03:13,810 --> 00:03:17,350 veikti abiejose masyvo pusę. 59 00:03:17,350 --> 00:03:21,030 Mes padengti rekursija tiek vėliau Žinoma, bet žinau, kad tai yra 60 00:03:21,030 --> 00:03:24,190 variantas, jei norite pabandyti. 61 00:03:24,190 --> 00:03:26,030 >> Dabar pažvelkime rūšiuoti. 62 00:03:26,030 --> 00:03:30,750 Rūšiuoti trunka masyvą ir sveikasis skaičius n, kuris yra masyvo dydis. 63 00:03:30,750 --> 00:03:34,030 Dabar yra įvairių tipų dvasia, ir jūs galite pažvelgti į kai 64 00:03:34,030 --> 00:03:36,370 šortai demo ir paaiškinimus. 65 00:03:36,370 --> 00:03:39,580 Grįžimas į mūsų rūšiavimo funkcija klaidinga. 66 00:03:39,580 --> 00:03:43,580 Taigi, tai reiškia, kad mes neketiname grąžinti visą spektrą nuo rūšies. 67 00:03:43,580 --> 00:03:48,140 Mes iš tikrųjų ketiname pakeisti labai matrica, kuri buvo perduota į mus. 68 00:03:48,140 --> 00:03:52,290 >> Ir tai įmanoma, nes matricos priimtas atsižvelgiant į C Dabar mes 69 00:03:52,290 --> 00:03:55,290 vėliau sužinoti daugiau apie tai, bet Esminis skirtumas tarp kitko 70 00:03:55,290 --> 00:03:59,340 kažką panašaus į sveikojo skaičiaus ir artimųjų masyvo, yra tai, kad kai 71 00:03:59,340 --> 00:04:03,490 praeiti sveikasis skaičius, C tik ketina parengia šio sveikojo skaičiaus kopiją ir perduoti 72 00:04:03,490 --> 00:04:04,450 tai ta funkcija. 73 00:04:04,450 --> 00:04:08,530 Originalus kintamasis nebus pakeistas kai funkcija yra baigtas. 74 00:04:08,530 --> 00:04:12,480 Su masyvo, kita vertus, tai nesiruošia daryti kopiją, ir jūs 75 00:04:12,480 --> 00:04:17,910 faktiškai redaguoti labai masyvo pati. 76 00:04:17,910 --> 00:04:21,269 >> Taigi, vieno tipo rūšies yra pasirinkimas rūšiuoti. 77 00:04:21,269 --> 00:04:24,750 Pasirinkimas rūšiuoti veikia pradedant pradžioje, ir tada pakartoti 78 00:04:24,750 --> 00:04:26,820 daugiau ir rasti mažiausią elementą. 79 00:04:26,820 --> 00:04:30,710 Ir tada jūs apsikeitimo kad mažiausias elementas su pirmąja. 80 00:04:30,710 --> 00:04:34,360 Ir tada jums pereiti prie antrojo elemento , Rasti kitas mažiausias 81 00:04:34,360 --> 00:04:38,320 elementas, ir tada sukeisti, kad su Antrasis elementas masyve, nes 82 00:04:38,320 --> 00:04:41,100 pirmasis elementas jau yra išspręstos. 83 00:04:41,100 --> 00:04:45,370 Ir taip, tada jūs ir toliau už kiekvieną elementas nustatant mažiausias 84 00:04:45,370 --> 00:04:47,690 vertė ir keičiant jį. 85 00:04:47,690 --> 00:04:53,460 >> Aš lygi 0, pats pirmas elementas n atėmus 1, jūs ketinate palyginti 86 00:04:53,460 --> 00:04:57,820 kiekvieną kitą vertė po to ir sužinoti minimalios vertės indeksas. 87 00:04:57,820 --> 00:05:02,520 Radę minimali vertė indeksas, galite sukeisti, kad masyvo reikšmę 88 00:05:02,520 --> 00:05:05,930 minimali ir masyvas I. 89 00:05:05,930 --> 00:05:09,760 >> Kitas panašaus tipo, kad jūs galite įgyvendinti yra burbulas rūšiuoti. 90 00:05:09,760 --> 00:05:14,380 Taigi burbulas rūšiuoti kartojasi virš sąrašo palyginti gretimus elementus ir 91 00:05:14,380 --> 00:05:17,720 Swapping elementus, yra neteisinga tvarka. 92 00:05:17,720 --> 00:05:22,380 Ir tokiu būdu, didžiausias elementas bus burbulas iki galo. 93 00:05:22,380 --> 00:05:28,070 Ir sąrašas surūšiuotas kartą ne daugiau elementai buvo sukeistos. 94 00:05:28,070 --> 00:05:31,920 >> Taigi tie du pavyzdžiai rūšiuoti algoritmai, kad galite įgyvendinti dėl 95 00:05:31,920 --> 00:05:33,230 find programa. 96 00:05:33,230 --> 00:05:37,350 Kai baigsite rūšiuoti ir jūs padaryta paiešką, baigsite. 97 00:05:37,350 --> 00:05:39,720 Mano vardas Zamyla, ir tai yra CS50. 98 00:05:39,720 --> 00:05:46,987 >> [Muzikavimo]