DAVID Malan: Gerai. Taigi tai yra CS50, ir tai yra dabar savaitės trijų pradžia. Taigi iki šiol, mes buvo raštu programas C kad atrodo šiek tiek kažkas panašaus į tai čia. Taigi mes turime porą aštrus apima viršuje. Mes turime int pagrindinis, negaliojančiu, ir tada kažką daryti per vidurį, kai šiek tiek kodo viduje tos funkcijos. Tačiau raktas buvo tai, kad mes kalbėjome negaliojančiu čia. Taigi negaliojančiu, visą šį laiką, nurodoma, kad ši programa, kai paleisti, galima paleisti tik per savo vardu. Jūs negalite įvesti bet kokius kitus žodžius ar Skaičiai po programos vardą kai paleisti jį. Taigi, pavyzdžiui, jei programa buvo surinkti į failą pavadinimu Sveiki, galite padaryti ./hello, bet kad tai. 

Vienintelis būdas, kad galėtumėte prisidėti prie šios programos yra paskambinus funkciją. Pavyzdžiui, kokią funkciją mes buvo iki šiol, naudojant gauti informacijos iš vartotojo? 

PUBLIKA: Gauk eilutę. DAVID Malan: Norėdami gauti eilutę, arba gauti int, ar jūs matėte kitus, , net jei jūs dar naudojo juos, kaip gauti ilgai, ilgai ir pan. Bet tarkime, kad mes tikrai norite pradėti rašymo programos, kurios yra šiek tiek daugiau universalus, ir, tiesą sakant, šiek tiek daugiau kaip komandas jūs buvo gauti, tikiuosi, šiek tiek pripratę. Kaip kompaktinio disko erdvės Dropbox. Tai, žinoma, pokyčiai Jūsų katalogas, darant prielaidą, Jūs esate John Harvardo namuose katalogas, į savo Dropbox aplanką. Tuo tarpu, komanda, kaip tai sukuria naują katalogą, pavadintą pset2, kaip jūs galbūt jau arba netrukus už problemos nustatyti du. Padaryti Sveiki, žinoma, yra komanda kad stato programą "labas iš failo pavadinimu labas taškas c. Ir kiekvienas iš jų atvejai, dabar mes jau pateikti argumentą vadinamasis komandinės eilutės, mirksi greitai, kad gamintojas žino, ką statyti ir tt kad mkdir žino, ką aplanko kurti, ir taip, kad cd žino ten, kur norite eiti. Tačiau iki šiol, mes nuolat sako kad pagrindinis jūsų numatytasis funkcija, turi void išraiška viduje šių skliausteliuose, tai reiškia, kad jai negali imtis jokių argumentų. 

Taigi pradedant šiandien ką mes ketiname daryti, yra, mes ketiname pradėti remti tokius dalykus kaip šis net. Tiesą sakant, šiuo atveju, kuris jums paprastai nėra rankiniu būdu įvesti, Padaryti tai daro jau už mus, ten nėra vienas, bet vienas, du, trys papildomos stygos po programa pavadinta Zaszczękać. Taigi, kaip mes tai pasiekti? 

Na, pradedant šiandien tais atvejais, kai mes norime siekiant prisidėti per Vadinamasis komandinės eilutės, mes ketiname pradėti pridedant čia kas yra yellow-- pakeičiant negaliojančiu su int argc kableliu styginių argv atviras laikiklis skliaustai uždaromi. Dabar tai įdomu už keleto priežasčių. Vienas iš jų, jis ketina pranešti mums rašyti programos, kurios yra šiek tiek labiau dinamiškas. Tačiau, daugiau įtikinamai, jis ketina atverti dabar pokalbis būtų kas masyvai tikrai gali būti naudojamas, kas eilutę tikrai yra po gaubtu, iki kitos savaitės, kai mes pradedame nardymas į dar giliau, kaip mašina kad visi iš šių dalykų darbe. Bet dabar, tegul piešia, galbūt, nuotraukos. 

Rašydami programą su pagrindinis paskelbė Tokiu būdu, pavyzdžiui, kad pagrindinis trunka du argumentus, int and-- kas duomenų tipas yra antrasis argumentas? 

PUBLIKA: Array. DAVID Malan: Array. Taigi atrodo iš pirmo žvilgsnio, kaip tai eilutė, bet pastebėsite, skliaustus. Prisiminkite paskutinį kartą pristatėme masyvo sąvoka. Ir masyvai naudoti skliaustus, kontekstuose pora. Galite naudoti aikštėje skliausteliuose eiti į masyvą ir gauti tam tikrą elementą, pavyzdžiui, laikiklis 0 arba laikiklis 1 arba laikiklis 2. Bet mes matėme, jei trumpai, praeitą savaitę, kad jūs taip pat naudoti šiuos skliaustus, į paskelbti dydį masyvo, jei iš anksto žinoti, kiek ints arba kiek stygos arba ką iš tikrųjų nori. Taigi paaiškėja, ten trečioji kontekstas čia kad neturi skaičių viduje iš laužtiniuose skliaustuose. Kai nurodote, kaip aš čia kažką panašaus argv vardas, kuri yra tik išgalvotas būdas sakydamas argumentas vektorių, kuris yra dar vienas išgalvotas būdas sakydamas savo argumentų masyvo, atviras laikiklis skliaustai uždaromi tik reiškia, kad jūs nebūtinai iš anksto žinoti, kaip didelis masyvas bus, bet jūs žinote, jis ketina būti masyvas. Taigi, jei jūs nežinote, skaičius nedėkite ten, atviro kronšteino glaudžiai laikiklio reiškia, kad argv nėra eilutė, bet eilučių masyvas. Taigi sintaksiškai, jei jums prisiminkite praėjusią savaitę, tai labai panašus į sakydamas kažkas panašaus į int amžiaus atviras laikikliu ir tada kažkas vėliau. Taigi, ką tai atrodo? Leiskite tikrųjų atkreipti nuotrauką. Taigi, kai jūs paleisti šią programą su pagrindiniais Turinčios dvi argumentai apibrėžta viduje tų skliausteliuose, jūs iš esmės turi bent du gabaliukus atminties įteikė jums po gaubtu. Vienas iš jų, kaip aš jums atkreipia kaip stačiakampio, ketina būti vadinamas argc. Ir lygiai taip pat greitai Priminti, kas yra duomenų tipas, argc? Taigi, tai vid. Taigi skaičius nuolat eiti argc-- posūkių , kad stovi argumentų skaičius. Tuo tarpu, aš sudarytas argv kaip masyvą. Ir aš tikrai nežino, kaip ilgai jis bus, taip šiandienos tikslais dot dot dot. Ji gali gauti tam tikros trukmės. Bet aš čia nuotraukoje bent keturi stačiakampiai. Taigi argv iš atminties, kuri saugo riekė Styga Styga Styga dot dot dot, ir argc yra tik vienas gabalas iš atminties sveikasis skaičius. 

Taigi dabar, būkime truputį tikslesnis. Jei kai turiu stygos šiame masyve, vadinamas argv, aš noriu gauti į juos atskirai, kaip praeitą savaitę, mes ketiname naudoti žymėjimo kaip argv laikiklio 0 gauti pirmas dalykas masyvą. Argv laikiklis 1 gauti Antras dalykas, ir taip toliau. Svarbiausias čia yra, mes vis dar 0 indexed-- mes vis dar skaičiuojant nuo 0. Taigi dabar tegul iš tikrųjų įdėti kažką tai. Jei aš būčiau sudaryti programą, pavadintą labas iš failo pavadinimu labas taškas c, ir tada aš paleisti šią programą dot slash Sveiki, ką mano kompiuterio, mano nešiojamas, atrodo po gaubtu Šiuo metu aš paleisti taškas velniop labas ir paspauskite "Enter"? Na, tai turbūt ką galėtume apibūdinti kaip kompiuteris turinį atminties arba RAM-- Random Access Memory. Kitaip tariant, kompiuteris, kažkaip jums stebuklingai, kelia numeris 1 argc, AKA argcount, ir tai kelia tiesiog eilutę ./hello į argv laikiklio 0. Neįsivaizduoju, tiesą sakant, tai, kas į argv laikikliu 1, 2 arba 3, nes jei vartotojas turi ne įvedėte nieko be ./hello, mes ketiname daryti prielaidą, kad šie yra labiausiai tikėtina, šiukšlių vertybes, taip sakant. Šie atminties gabaliukus egzistuoja, bet tai ne mums pažvelgti į juos, nes argcount yra tik vienas. 

Dabar, tuo tarpu, jei aš rašyti paleisti kitą programą, CD, kuri yra daugiau tinkamai komandą, Jūsų mirksi prompt-- cd erdvę Dropbox-- kai aš paleisti, kad efektyviai, kai cd programa paleisti, argc, viduje mano kompiuterio atmintyje, yra Patys trumpiausią antras skaičius 2. Ir tada argv laikiklis o turi CD, argv laikiklis 1 turi Dropbox, ir tada, žinoma komanda baigia, todėl visą šį atminties esmės nueina ir naudojama kažkas. Ir štai kodėl aš sakau, tik sekundės. 

Tuo tarpu, jei mes mkdir pset2, vaizdas atrodo beveik tą patį, bet su skirtingais stygos viduje argv. Jei aš Zaszczękać brūkšnys labas labas taškas c, pačią idėją. Daugiau stuff užpildytas argv ir argc, žinoma, yra 4. Taigi, kitaip tariant, nors šio masyvo gali būti dot dot dot, kai kintamo ilgio, taip sakant, jūs visada žinoti, kur jo pabaigos yra, nes argc ketina pasakyti jums momentas, kada turite nustoti žiūri elementų argv. Jūs galite ieškoti tik keturių iš viso šiuo atveju. 

Tad dabar pats pažvelgti, galbūt, paprasta programa. Vienas, kad tiesiog sako labas kad kažkas panašaus Zamyla. Taigi, aš teigti aš ruošiuosi parašyti programą vos akimirką, per kurią galėčiau padaryti ./hello erdvė Zamyla, tada aš noriu mano programa atsispausdinti kažką super paprasta, kaip "Labas, Zamyla." Dabar praeityje mes naudojamas getstring. Taigi praeityje, net jei esate naujas programavimo, šansai yra jums gali pakelti programa, kuri naudoja getstring ir tada naudoja printf pasisveikinti su Zamyla. Bet tegul ne naudoti getstring šį kartą. Leiskite vietoj eiti į Appliant o apima standartinį I O dot val. Leiskite taip pat CS50 dot val. Dabar int main, ir dabar aš nesiruošia daryti negaliojančiu šiandien. Vietoj to, aš ruošiuosi daryti int argc styginių argv atviras laikiklis skliaustai uždaromi, nenurodant numerį. Ir dabar čia yra mano vadinamasis daryti. Ką aš ruošiuosi padaryti dabar yra, aš tikiu, ketinate daryti apie tikėjimo šuolis truputį, Aš ruošiuosi daryti prielaidą, kad vartotojo vyksta teisingai naudoti šią programą, ir aš tiesiog ketinate padaryti printf Sveiki,% sn. Taigi nieko naujo ten. Bet aš noriu dabar įdėti, ką žodis vartotojas įveda Po programos pavadinimą. Taigi, jei aš ./hello erdvę Zamyla, aš noriu kažkaip programiškai prieiga citata citatos "Zamyla." todėl aš gali eiti į mano argumentas vektorių, mano masyvo eilučių ir jei komandą, vėl buvo ./hello erdvė Zamyla, kokiu numeriu aš noriu įdėti į argv čia? PUBLIKA: 1. DAVID Malan: 1, nes laikiklis 0 paaiškėja, bus Programos pavadinimas, kaip matėme. Taigi laikiklis 1 yra pirmasis žodis kad I, vartotojas, įvedėte. Aš ruošiuosi eiti į priekį ir išsaugoti tai. Aš ruošiuosi eiti į mano aplanką kur aš pateikti šį failą. Aš ruošiuosi daryti, kad Hello 3. Comp IO yra Gerai. ./hello Zamyla Enter. Ką man daryti negerai? Aš sugauti netikėtai aš tik už akimirką ten. Ką man daryti negerai? 

PUBLIKA: Vardas. 

DAVID Malan: failo tikrųjų vadinamas hello3.c. Ir aš padariau, kad tik nuoseklumas, nes mes turėjo hello.c 's praeities internetinėje kodą. Taigi leiskite išspręsti šią ./hello laikiklis brūkšnys 3 Zamyla. Įveskite. Ir dabar mes turime labas, Zamyla. Tuo tarpu, aš galiu jį pakeisti būti Robas, arba tikrai bet koks kitas žodis. 

Tačiau aptarkime kampe bylą. Kas gali tikitės atsitiks, jei Nemanau tipo niekieno vardą ne visi? 

PUBLIKA: Klaida. 

DAVID Malan: klaida kažkoks, galbūt. Pažiūrėkime. Įveskite. Null. Taigi printf iš tikrųjų yra mažai saugo mus čia, ir tiesiog spausdinti atvirų paren null, bet dar blogiau dalykų gali atsitikti. Ir tik parodyti ką jūs visiškai neturėtų daryti, eikime į čia ir pradėti išnyra aplink. Teisė? Jei aš žinau, kad į paveikslėlį atmintis iš esmės yra tai, argv laikiklis 1 turi Zamyla, argv laikiklis 0 turi ./hello arba ./hello-3. Kas yra laikiklis 2? Taigi aš galiu atsakyti, kad klausimą sau, ar ne? Galiu tiesiog pakeisti 1 iki 2. Dabar galiu perkompiliuoti labas 3, ./hello3 Leiskite padidinti ir paspauskite "Enter". Oi. Nėra kabutes. Įdomu. Štai kokios cool pamatyti, ką dar yra čia. 

Taigi, ką dar yra viduje mano nešiojamas? Leiskite išsaugokite jį su laikikliu 3. Padaryti hello3, ./hello-3. Keistas. O dabar galime gauti tikrai bold-- 50. Taigi, kad tikrai nardymo giliai į mano kompiuterio atmintyje. 50 indeksus. Todėl įsitikinkite, Hello 3 ./hello-3. Keistas. Gerai, dabar aš tiesiog ketina gauti neapgalvotas. Vykime į 5000. Viskas gerai. Taigi leiskite man perkompiliuoti. Padaryti hello3, ./hello-3. Gerai. Dabar kai kurie iš jūsų, gali būti lemputė nenukryptų. Kiek turite matė šį pranešimą prieš? Gerai. Taigi, kodėl? 

Kursai are-- ir ten skiriasi dalykų, kurie gali sukelti tai, ir aiškiai esate geras draugija turime aiškiai sukėlė tai, kas vadinama segmentavimo kaltės. Ir ilga istorija trumpa šiandien, aš jau palietė atminties segmentą kad aš ne turėti. Kur segmentas tiesiog reiškia, riekė atminties, kad aš neturiu. Dabar kompiuteris užtikrina, kad, jei aš paleisti ./helloZamyla kad galiu paliesti argv būti laikiklis 0 ir argv laikiklis 1. Bet argc yra vertė 2, tai reiškia, kad aš esu tik allowed-- tai tarsi garbės system-- liesti laikiklis 0 ir laikiklis 1. Jeigu aš eiti toliau, ten visiškai bus atminties ten. Mano RAM egzistuoja fiziškai kompiuteryje. Bet kas žino, kas ten? Iš tiesų, aš bėgu kartotinis programos vienu metu. Aš gali turėti seen-- jei aš būčiau ne Tokiu būdu į Appliant bet mano Mac ar PC-- galiu turėti matė elektroniniu paštu turinį. Galėčiau mačiau akimirksniu žinutė Aš neseniai išsiųstas. Viskas, kas gali būti išlikęs aplink atminties galėjo būti atvertas būdu tai savavališkas kvadratinių laikiklis notacija. Arba, dar blogiau, jums gali tekti rasti vieną iš mano slaptažodžius kad aš neseniai įvestas, kad programa buvo saugomi atmintyje taip autentifikuoti mane, tada tiesiog rūšies paliko jį RAM, kol aš mesti tą programą. 

Ir iš tiesų, tai yra vienas iš pavojus ir vienas įgaliojimai naudojant panašų C kalbą Jūs turite užtikrinti nekliudomą prieigą į visą turinį iš programos atminties, ir ką blogi vaikinai gali net daryti tose cases-- ypač kai mes gauti interneto programavimo link semestro pabaigos, mes peržiūrėti šį topic-- yra baksnoti aplink, potencialiai kažkieno kompiuterio atminties ir rasti tokių smalsių dalykų kaip matėme ten. Arba net dar blogiau, slaptažodžius, kad jis arba ji gali tada naudoti daryti blogus dalykus. 

Taigi aišku aš ne tai padarysite, nes keistam dalykų pradėti atsitikti. Iš tiesų, tai yra programa, genda. Tai būtų lygiavertis Mac OS arba Windows programa langas tiesiog nyksta. Netikėtas įvyko klaida. Be komandų eilutės aplinka matome kažką panašaus į tai. Bet tai, kodėl yra aš tiesiog palietus atmintis, kuris nepriklauso man. 

Taigi leiskite gintis nuo šio a šiek tiek kitaip , žiūrėdamas šią programą čia. Taigi, dar kartą, skeletas kad mes matėme earlier-- ir aš atkreipė dėmesį į šią laiko int. Ir visą šį laiką pagrindinis yra iš tikrųjų grąžino vertę. Nors daugumoje mūsų paskaitos pavyzdžių mes niekada kadaise grįžti nieko pagrindinis. Mes tiesiog parašyti printf close garbanotas petnešomis ir viskas. Bet nemokamai, kas kompiliatorius buvo padaryti už jus, efektyviai, grįžta 0 už jus. Pasirodo out-- ir tai mažai counterintuitive-- kad 0 yra gera. Tai nereiškia, kad klaidingas savaime. 0 yra gera, ir nors ne 0 vertė, pasaulis nusprendė, gali reikšti klaidą. Taigi, jei jūs kada nors messed kažkas ant jūsų kompiuterio, ar programa tik mirė nuo jūsų ir jūs Dotarłeś šiek tiek klaidingą langą ekrane, sakydamas klaida neigiamas 49 ar klaida 23-- kai, atrodytų, savavališkas value-- tai nes programuotojas sunkiai koduojami vertė, kaip neigiamas arba teigiamas 49 23 atstovauti bet koks skaičius, išdrįstų pasakyti, iš 4 milijardų galimų dalykų kad gali suklysti programą. 

Taigi, kaip galėčiau imtis privalumas tai pats? Na, leiskite man atverti programą kad aš parašiau iš anksto, ir baksnoti aplink internete vadinamas Hello 4. Ir tai beveik identiškos, išskyrus tai, kad jos gavo truputį Klaidų tikrinimas. Šiuo atveju, aš vėl paskelbė Pagrindinis pat atsižvelgiant du argumentus, bet šį kartą, on line 17 pranešimas Darau tam normalumas patikrinti tiek. Aš įsitikinkite, kad argc lygi lygi 2. Nes jei jis yra, kad tai aš galiu saugiai paliesti ne tik laikiklį 0, bet laikiklį 1. Ir aš einu į priekį ir atsispausdinti, šiuo atveju Zamyla arba Rob ar kokia žodis įvedžiau iš. O dabar tik gauti šiek tiek daugiau tinkamas, Aš ruošiuosi aiškiai grįžti 0, reiškia viskas yra gerai. Nieko blogo neatsitiko. 

Tačiau pagal susitarimą, aš ruošiuosi grįžti 1, arba atvirai bet ne 0 vertė, jei kažkas negerai. Dabar vartotojas nesiruošia tikrai pastebėsite, kas vyksta. Iš tiesų, jei aš einu į šį katalogą, mes priartinti ir padarysiu Hello 4, ./hello-4 Zamyla elgiasi kaip aš tikėtis. Bet jei aš vietoj ne tipo nieko, nieko, atrodo, kad taip atsitiktų, tačiau ji nėra gedimų. Ir jei aš vietoj kažką kaip Rob yra Proctor į Thayer-- pasidalijimo savavališkas informacija. Tačiau pranešimas, argv 1, 2, 3, 4 ir 5 dabar turėtų egzistuoti atmintyje. Tai taip pat yra ne tai, kas mano programa tikisi, nes aš patikrinti, ar argc lygus lygus 2 ar ne. Taigi, aš dabar ginti prieš tai. 

Dabar, kaip žemę, mes programmer-- ar veikiau mes users-- niekada matyti, kad 0 arba 1, tačiau naudojant įrankis, vadinamas Debugger, arba kitas priemones, kaip matysime prieš ilgas, galite programuotojas iš tikrųjų gali pamatyti, kas gali būti negerai viduje savo programą. 

Taigi, kokių nors klausimų apie argc? Taip. 

PUBLIKA: aš mačiau, kur jie neturėjo charakterį, [nesigirdi] tik pasakė styginių žvaigždė r, pavyzdžiui, charakteris žvaigždutė kablelis. Ar jie atitinka čia? 

DAVID Malan: Jie yra. Taigi klausimas yra, jūs turite kartais matė programos kaip tai, kad ne sako styginių argv laikiklį bet vietoj to ką nors pasakyti kaip char žvaigždė argv laikiklio. Ir ten net kita variantai, kad jūs galite pamatyti. Jie iš tiesų yra lygiavertis. Nes dabar, mes turime tai rūšiuoti mokymo ratų ant į eilutę į CS50 formos biblioteka, tačiau vos per savaitę ar taip mes ketiname pašalinti, kad obstrukcija visiškai ir iš tikrųjų pažvelgti, kas char ir žvaigždės , ir kaip tie susiję su atminties atstovavimas apskritai. Taigi mes grįžti prie to. 

Kiti klausimai apie mūsų argv ar argc? Taip. PUBLIKA: Kodėl jis grįžta klaida [nesigirdi]? DAVID Malan: Kodėl tai padariau grąžina klaidos jei jums reikia oh! Be ankstesnėje byloje, kai mes buvo futzing aplink su atmintim, kodėl jis tik grąžina klaidos kai aš tikrai įvedėte didelį skaičių? Trumpas atsakymas yra, mes tiesiog pasisekė. Apskritai, kompiuterio paskirsto atmintį gabaliukus, ir jis man davė pakankamai didelis riekė, kad Aš toli, nepastebimai, paliesti laikiklio 2, laikiklis 3 laikiklis 50, bet kaip tik aš stumdosi mano laimė, aš peržengė ribos atminties riekė operacinė sistema davė man. Ir tai, kai jį prispaustas ir sakė, ne. Segmentavimas klaida. Taip. 

PUBLIKA: Kaip veikia kompiuteris žinoti argc vertę? 

DAVID Malan: Kaip veikia kompiuteris žinoti argc vertę? Paleidus programą, kad programa, pagal pobūdį mirksi eilutę perduodamas iš masyvo žodžiai, kurie buvo įvestas ne greitai, kad buvo įvedėte eilutėje. Ir todėl jis yra jūsų operacinė sistema, kuri iš esmės užpildo pagrindinių argumentų už jus. Štai viena iš paslaugų kad jūs gaunate, tarsi slapta prispaudžia gaubtu operacinė sistema. Kiti klausimai? Taip. 

PUBLIKA: Ką branduolys sąvartynas reiškia? DAVID Malan: Ką branduolys sąvartynas reiškia? Štai geras klausimas. Ir leiskite man grįžti į Šis katalogas čia. Ir jūs pastebėsite, kad Turiu naują failą ten. Tai iš tiesų vadinamas branduolys, ir tai iš tikrųjų paprastai padoraus dydžio failą. Tai iš esmės yra fotografiją įrodymas, kad mano programos atminties turinį arba RAM, kai jis sudužo. Ir tai bus naudinga, potencialiai diagnostiniu, kai mes kalbame būsimos paskaitos ir skyriuje apie derinimo, nes jūs iš tikrųjų galite padaryti ekvivalentas skaitmeninio skrodimo dėl šios bylos, kad padėtų išsiaiškinti ką padarė negerai savo programą. Taip. 

PUBLIKA: Ar argc komandą į pati, ar galite įvardyti tai nieko? 

DAVID Malan: Geras klausimas. Ar argc komandą savaime, ar galite pavadinti jį ką nors? Tai tikrai ne komanda. Tai tiesiog kintamasis s Vardas ir pavardė arba argumentas vardą, ir taip absoliučiai mes galima pavadinti šį foo, galėtume vadinti šią juostą, kuri yra linkę būti eiti į žodžius, kad kompiuterių mokslininkas eina į. Tačiau pagal susitarimą, mes naudojame argc ir argv. Bet tai tik žmogaus konvencija, nieko daugiau. Viskas gerai. Taigi pasirodo, aš buvau pasakoja balto lie-- tiek ir tiesą sakant, ateityje, pamatysite mes jau pasakojo kitas baltas melas. Bet dabar, mes ketiname žievelės atgal vieną iš šių. Šiuo atveju čia kai aš anksčiau vyko kaip ./hello arba ./hello-3 programos Zamyla, mes turėjome turinyje mano Kompiuterio atminties ieško beveik kaip tai. Bet prisiminti, kas eilutė. Ką mes galime pasakyti prieš savaitę, kas eilutė iš tikrųjų yra po kapotu? PUBLIKA: Array simbolių. DAVID Malan: Tai masyvas simbolių, tiesa? Taigi, mes galime turėti iš masyvo stygos, bet, savo ruožtu, seka yra simbolių masyvas. Taigi, jei aš tikrai noriu būti analinis kai piešiu šią nuotrauką, Aš tikrai turėtų būti brėžinys tai šiek tiek daugiau, kaip šis, , pagal kurį kiekvienas iš jų indeksus mano argv masyvo, yra pati visa eilutė kad pati yra masyve. Ir dabar baltas melas mes sakau šiandien yra tai, kad vaizdas nėra atrodo gana panašus į šį. Iš tiesų, mažai kvadratų yra paprastai už didelių stačiakampių ten. Bet mes grįžti į, kad iki ilgai. Bet tai ./hello Backslash 0, kad yra specialus simbolis, kad atriboja styginių pabaigą, ir mes turime dar vieną po Zamyla pavadinimas. Taigi, ką tai reiškia? 

Na, leiskite man eiti į priekį ir atverti kitus du pavyzdžius , kurie yra prieinami internete. Vienas iš jų yra vadinamas argv1.c ir kitas argv2. Tai super paprasta programa, kuri skiriasi nuo ankstesniųjų programų tuo, kad dabar aš naudoju argc ir argv čia. Ir dabar aš integruojant su už linijos į 0 linijos 18, nuo i = d iki argc. Ir ką aš ketinu daryti su šio kodo čia linijos? Anglų kalba. Tai akivaizdžiai rodo, naudojimą argc. Bet anglų kalba, ką tai daryti, jei aš paleisti šią programą? Taip? 

PUBLIKA: Jis ketina spausdinti ekrano tiek kartų, kiek norite. DAVID Malan: Būtent. Taigi ką aš žodžiai įrašykite bent eilutę, tai ketina atryti juos man po vieną eilutėje. Taigi eikime į priekį ir tai padaryti. Leiskite man eiti į mano katalogą ir padarysiu argv1 ./argv1. Ir dabar, tegul laikyti jį paprasta. Darom nieko ne pirmas. Jis padarė spausdinti vieną dalyką, ir tai tikrai programos pavadinimas, nes tai yra laikiklis 0. Jeigu aš dabar pasakyti foo, jis ketina padaryti tie du, ir, jei aš sakau, foo bar, jis ketina pasakyti šiuos tris dalykus. Dabar tai šiek tiek įdomus, gal. Bet prisiminti, kad argv yra eilučių masyvas, bet eilutė yra iš simbolių masyvas, todėl galime imtis dalykų vienu žingsniu ir taikyti, kad pagrindinė logika ir padaryti kodą atrodo šiek tiek daugiau paslaptingas, tiesa. Tačiau turėdami įdėtos kilpa, kažką panašaus ką jūs tikriausiai pamenate, kad iš Mario, Pavyzdžiui, jei tu jį šiuo būdu. 

Taigi, dabar pastebėsite on line 19, aš vėl Iteracja per mano argumentus, nuo 0 nuo iki argc. Ir dabar atitinka 21-- aš skolindamasi iš paskutinio week-- triuką Aš patikrinti, kas yra ilgis argv laikiklio i. Aš saugoti, kad n atsakymą. Ir tada aš integruojant iš j ant iki n, kur j yra inicializuoti 0. Taigi, Konvencija skaičiavimui. Kai jūs naudojote i, jei turite įdėtos kilpos, jūs negalite naudoti i vėl, kitaip jums Bylų, potencialiai vertė ne vidinės kilpos. Taigi aš naudoju j pagal susitarimą. Mes galime naudoti k. Jei turite daugiau nei k, tikriausiai per daug lizdus, ​​paprastai. Bet dabar, pastebės mano printf linija yra šiek tiek kitoks. Aš nespausdina% s, aš spausdinti% C, kuris, žinoma, yra už char vietos rezervavimo ženklas. 

Ir dabar pastebėsite šį sintaksė. Nauja. Mes nematėme anksčiau. Bet logiškai, tai tiesiog reiškia, gauti osios eilutę argv ir gauti jth ką? PUBLIKA: Personažo. DAVID Malan: Simbolių toje eilutę. Taigi, naudojant skliaustus, po laužtiniuose skliaustuose, tai yra nardymo pirmas į argv yra stygos, ir tada antra Kvadrātiekavas su j yra nardymo į simbolių kad visų pirma eilutę argv. Ir tada, tik gera priemonė, Aš spausdinant naują eilutę čia. Taigi dabar leiskite man eiti į priekį ir atidaryti iki šiek tiek didesnio lango todėl mes galime pamatyti šį veiksmą. Leiskite man eiti į tą aplanką. O dabar padarysiu argv-2-- whoops-- padaryti argv-2, ./argv 2. Įveskite. Ir tai šiek tiek sunku vertikaliai skaityti, bet tai iš tiesų iš vardo programa, po tuščią eilutę. Dabar leiskite man eiti į priekį ir daryti foo. Panašiai sunku skaityti, bet tai Iš tiesų spausdinti vieną simbolį eilutėje. Ir jei aš juostą, tai dabar spausdinti tuos eilutė po eilutės. Taigi Takeaway čia yra ne tiek , kad wow, pažvelgti į šią tvarkingas naujos triukas kur galima gauti prie turinio masyvo specifinių simbolių, o kaip mes atsižvelgiant šiuos pagrindinius idėjos, kaip indeksavimo į masyvą, ir tada indeksavimo į masyvas buvo tame masyve, ir tik taikant tokias pačias idėjas šiek tiek sudėtingesni pavyzdžiai. Tačiau pagrindai tikrai ne pasikeitė, net nuo praėjusios savaitės. 

Dabar tai yra tarsi laiku, tuo, kad, žinote, nulinės savaitę mes grojo su telefonų knygoje, kaip šis. Ir nors tai yra žinoma, fiziniai popieriaus gabaliukai, galite rūšies galvoti Telefonų knyga kaip masyvą. Žinoma, jei jums buvo reimplement tai gabalai šie popieriaus gabalėliai kompiuteryje, turbūt jums būtų naudoti kažką kaip masyvas saugoti visus tuos vardai ir numeriai nuo A visą kelią per Z. Taigi, tai yra gražus, nes jis leidžia mums galimybę, ko gero, apsvarstyti, kaip jums gali realiai įgyvendinti kažką panašaus, kad. Kaip su durimis serijos čia. Taigi, jei aš could-- turime vieną savanoriškai ateiti iki. Pažiūrėkime. Nepažįstamas veidas galbūt, nepažįstamas veidas galbūt. Kaip apie oranžine spalva? Čia. Oranžinė palaidinė, nagi iki. 

Vykime į priekį dabar ir judėti šios durys šalikelėje, perkelti juos iš už akimirką būdu. Koks tavo vardas? 

AJAY: 

DAVID Malan: Ajay. Davidas. Nice to meet you. Viskas gerai. Taigi, mes turime už šių šešių durys skaitmeniniu į screen-- arba, tiksliau sakant, septynios durelės screen-- visa krūva skaičių. Ir aš Jums sakė nieko į advance-- sutiko? AJAY: Nieko iš anksto. DAVID Malan: Viskas, ką aš noriu jums padaryti dabar yra rasti už mane, ir už mus, tikrai, skaičius 50, vienas žingsnis metu. 

AJAY: Taškų 50? 

DAVID Malan: skaičius 50. Ir jūs galite atskleisti, kas yra Už kiekvieną iš šių durų tiesiog paliesdami jį pirštu. Velnias. [Juokas] 

[Plojimai] 

Labai gerai padaryta. Gerai. Mes turime mielą dovaną premija už jus čia. Jūsų pasirinkimas filmų mes aptarė praėjusią savaitę. 

AJAY: O, žmogau. O, aš niekada nemačiau Spaceballs. 

DAVID Malan: Spaceballs. Viskas gerai. Taigi laikykis tik vieną akimirką. How-- padarykime tai būti mokomi moment-- kaip gi tu apie rasti skaičių 50? AJAY: Aš pasirinkau atsitiktinai. DAVID Malan: Taigi jūs pasirinkote atsitiktinai ir pasisekė. AJAY: Taip. DAVID Malan: Gerai. Puikus. Taigi dabar, turėjo jums ne Dotarłeś pasisekė, ką dar galėjo atsitikti už šių durų? Taigi, jei aš einu į priekį ir atskleisti šiuos numerius čia, jie iš tikrųjų yra atsitiktine tvarka. Ir geriausia, ką gali turėti padaryta, tiesą sakant, yra iš, galiausiai, blogiausiu atveju, tikrinti juos visus. Taigi jūs turite super laimingas, kuris yra ne tai, ką mes norime skambinti algoritmą. Taip, sveikinimai. Bet dabar let's-- Humoras man, jei gali. Vykime į šį skirtuką čia. Ir čia yra aiškiai numeriai kas atrodo atsitiktine tvarka, ir jie buvo. Bet dabar, jei aš vietoj teiginys kad už šių durų yra skaičiai, kurie yra rūšiuojami. Tikslas dabar yra taip pat mus rasti skaičių 50. Bet tai padaryti algoritmiškai ir papasakoti, kaip jūs ketinate apie tai. Ir jei jūs ją rasti, jūs nuolat filmą. Jūs nerandate tai, jūs suteikiate jai atgal. AJAY: Taigi, aš ruošiuosi patikrinti galus pirma, siekiant nustatyti, ar there's-- [Juokas ir plojimai] DAVID Malan: Here you go. Paimkime bent vieną išvaizdą iš Ajay pirmtakai, Sean, kuris buvo ne visai taip pasisekė. Gerai, kad savo užduotį čia Sean, yra taip. Aš paslėpti už tai durys septynetas, bet nuošalioje kai kuriose iš šių durų taip pat yra ir kitų ne neigiami skaičiai. Ir jūsų tikslas yra galvoti apie tai, viršutinėje eilutėje numerius kaip tik masyvą. Užtenka tik vienetų seka popieriaus su skaičiais už jų. Ir jūsų tikslas yra, tik naudojant viršų masyvas čia mane surasti skaičių septyni. Ir mes tada ketiname kritika kaip jums eiti apie tai daro. Kaip mus rasti skaičių septyni, prašau. Ne 5, 19, 13. Tai ne triukas klausimas. 1. Šiuo metu jūsų rezultatas nėra labai gerai, todėl jūs galite taip pat nuolat vyksta. 3. Eiti į. Atvirai kalbant, aš negaliu padėti, bet įdomu ką jūs net galvoti apie tai. 

Sean: Gebu tik iš viršutinėje eilutėje. DAVID Malan: Tik viršutinėje eilutėje. Taigi, jūs turite tris kairę. Taigi mane surasti 7. 

[PUBLIKA šūksniai PASIŪLYMAI] Taigi abu tai buvo nuostabu dėl labai skirtingų priežasčių. Taigi, tai yra, kai mes nerašomas prieš akimirką, ir svarbiausia įžvalga čia buvo šios durys buvo numerius už jų, kurie buvo surūšiuoti, idealus Takeaway, dėl kurių yra tai, kad jūs galite padaryti iš esmės geriau šis antrasis example-- ir, tiesą sakant, tai buvo Seano pirmasis bandymas su atsitiktinių skaičių kaip before-- bet kaip tik kaip šie skaičiai yra rūšiuojamos, panašiai kaip telefonų knygoje, ką jūs akivaizdžiai daryti? Arba, kaip jūs galite sverto, kad žinios? Taip. 

PUBLIKA: Nueini pusiaukelėje [nesigirdi]. DAVID Malan: Taip. Būtent. Taigi Ajay pradinis instinktas buvo Tikrinti galus, kaip prisimenu, ir tada mes tarsi užbaigtas pavyzdys greitai. Bet jei mes pradėjome tai daryti daugiau metodiškai palei tas linijas, bet pradedant galbūt viduryje, nes jie rūšiuojami, kaip greitai, kaip mes atskleisti skaičius 16, todėl mes know-- ir darykime tiksliai that-- mes Todėl žinau, kad 50, šiandienos atveju, jau turiu būti į dešinę. Taigi, kaip ir nulinės kai savaitę mes sudraskė telefonų knygą per pusę ir išmetė pusę problema toli, pati idėja čia. Mes galime mesti šį pusę problemos toli. Ir tikriausiai tai, ką jums gali padaryti algoritmiškai, kai jūs žinote, kad 50 turi būti į dešinę, jei tai bet kur, tai pabandyti ten, viduryje likusių durų. Žinoma, 50 yra didesnis nei 42, o mes galime mesti šį likusį ketvirtį problemos toli, ir, galiausiai, nustatyti kažkas panašaus į 50. Bet kaip su telefonų knyga, šie skaičiai buvo suteikta mums jau Rūšiuoti užsakymas, kuris palieka mus su klausimu, kaip jums gauti dalykų į surūšiuotas tam? Ir, tiesą sakant, kokia kaina? Tai vienas dalykas, kad būtų įteikė telefonų knyga ir tada nustebinti savo draugus ieškant telefono numeris tikrai greitai, tiesa? Tearing 32 puslapių iš rasti asmuo iš 4 milijardų puslapių, sakėme vienas kraštutinis pavyzdys. Bet kiek laiko prireikė "Verizon" rūšiuoti, kad telefono knygą? Kiek laiko tai užtruks mus Jei norite surūšiuoti šių septynis numerius? Štai klausimas, kad mes Iki šiol visiškai ignoruojami. 

Taigi leiskite atsakyti į šį klausimą dabar. Ir mes visi iš filmų dabar bet mes turime keletą streso kamuolius. Jei, tarkim, aštuoni savanoriai ne tai kad sutikote su mumis čia? Vykime į priekį ir daryti, kaip apie iš jūsų keturių, trys iš jūsų čia? Gauk keletą naujų veidų. Ir iš jūsų keturių ten? Ir now-- tegul ne šališkumas here-- ir skaičius aštuonių per čia galo. Nagi iki. Viskas gerai. Taigi, ką mes turime čia kiekvienas iš jūsų yra skaičius. Jei norite eiti į priekį, priimti šį numerį. Koks tavo vardas? 

Artie: Artie. 

DAVID Malan: Artie, gerai. Jūs esate numeris 1. 

AMIN: Amin. DAVID Malan: Amin. Davidas. Jūs esate numeris 2. Ir eiti į priekį, nes aš ranka Jūs popierių lapų, išsirikiuoti save priešais muzikos stovi ta pačia tvarka, kaip iki ten. 

Andy: Sveiki, Andy. 

DAVID Malan: Andy, tai malonu matyti jus. 3 numeris. 

JACOB: "Jokūbas". 

DAVID Malan: Jokūbas, numeris 4. Sveiki atvykę į laivą. GRANT: Grantas. DAVID Malan: Grantas. 5 numeris. 

Alanna: Alanna. 

DAVID Malan: Alanna, numeris 6. 

FRANCES: Frances. DAVID Malan: Frances, skaičius 7. Ir? 

RACHEL: Rachel. 

DAVID Malan: Rachelė, numeris 8. Viskas gerai. Eiti į priekį ir gauti sau tokia tvarka. Leiskite įdėti vieną likusį muzika stovėti vietoje. Jeigu jums reikia stendas? Gerai. Eiti į priekį ir tiesiog įdėti savo numerius kur auditorija gali juos matyti, muzika stovėti susiduria išorę. Ir tikiuosi, mūsų pirmasis normalumas patikrinti here-- 4, 2, 6. Oh-oh. Palaukit. Mes neturime 8. Man reikia iškeldinti jus iš pavyzdys kažkaip. Ne Ne, tai viskas OK. Pažiūrėkime. Mes galime tai padaryti. Budėjimo. Čia mes eiti. Teisinga. Viskas gerai. Taigi, dabar mes turime 8, 1, 3 7, 5. Gerai. Puikus. 

Taigi po ranka klausimas yra, ne kokia kaina, ir per kokį metodą, mes galime iš tikrųjų rūšiuoti šiuos numerius čia kad galėtume rūšies darbą atgal, galiausiai, ir decide-- tai tikrai įspūdingas, tai tikrai veiksminga, kad galiu padalinti ir užkariauti telefono knygą? Ar ji tikrai veiksminga, kad Galiu padalinti ir užkariauti tie skaitmeniniai kūriniai popieriaus ant lentos, jei gal tai vyksta mums kainavo likimo laiko ar energijos arba centrinio procesoriaus ciklų faktiškai gauti mūsų duomenis į kai rūšiuotų tvarka? Taigi leiskite paklausti šį klausimą. 

Taigi, pirmiausia išjungti, šie skaičiai yra į gana daug atsitiktine tvarka, ir aš ruošiuosi pasiūlyti vienas algoritmas, ar procesas , pagal kurią mes galime rūšiuoti šie žmonės. Aš ruošiuosi kreiptis tai gana naiviai. Ir aš ruošiuosi pripažinti kad tai tipo daug už mane wrap savo mintis apie visų duomenų iš karto. Bet žinote ką? Aš ruošiuosi padaryti kai labai paprasti ribiniai pataisymai. 4 ir 2 yra iš tam, jei tikslas yra pereiti nuo 1 d iki 8. Taigi jūs žinote, ką? Aš ruošiuosi jums vaikinai apsikeitimo, jei įjungsite fiziškai pozicijos ir jūsų popieriaus lapų. Dabar 4 ir 6, tai eilės tvarka. Aš ruošiuosi palikti tie būti. 6 ir 8, jie yra tvarkingi. Ėjimas palikti jiems būti. 8 ir1, iš tam. Jei du neprieštarausiu Swapping. Dabar 8 ir 3, jei jus vaikinai gali sukeisti. 8 ir 7, jei jus vaikinai gali sukeisti. Ir 8 ir 5, jei jus vaikinai gali sukeisti. 

Dabar, aš padariau? Ne, žinoma, ne. Bet aš padariau situacija geriau, tiesa? Koks buvo tavo vardas, numeris 8? 

RACHEL: Rachel. DAVID Malan: Rachelė turi efektyviai burbuliukais iki gana toli, visą kelią iki pabaigos mano masyvas numerius čia. Ir taip, kad problema yra rūšies išspręsta. Dabar, be abejo, 2 dar turi perkelti šiek tiek, ir 4 ir 6 ir 1. Bet man atrodo, kad Dotarłeś šiek tiek arčiau į tirpalą. Taigi leiskite taikyti tas pats naivus euristinis dar kartą. 2 ir 4, Gerai. 4 ir 6, Gerai. 6 ir 1, mm mm. Leiskite apsikeitimo. 6 ir 3 mm mm. Leiskite apsikeitimo. 6 ir 7 yra geras. 7 ir 5, nope. Leiskite apsikeitimo. O dabar 7 ir 8. Ir koks tavo vardas dar kartą? FRANCES: Frances. DAVID Malan: Frances. Taigi dabar Frances yra net geriau pozicija, nes dabar 7 ir 8 teisingai burbuliukais iki viršaus. Taigi 2 ir 4 Gerai. 4 ir 1, tegul apsikeitimo. 4 ir 3, tegul apsikeitimo. 4 ir 6, esate Gerai. 6 ir 5, tegul apsikeitimo. Ir dabar tie vaikinai yra geri. Mes beveik ten. 2 ir 1, neveikia, todėl apsikeitimo. O dabar leiskite man padaryti normalumas patikrinti. 2 ir 3, 3 ir 4, 4 ir 5, 5 ir 6, 6 ir 7, 8. Gerai, kad mes baigsime. 

Bet kokia kaina aš rūšiuoti šiuos numerius čia? Na, kiek žingsnių aš potencialiai imtis, kai rūšiavimas šie žmonės? Na, mes grįžti į šį klausimą. Bet, tiesą sakant, jei turite tiek nuobodu, tai rūšies atskleisti tuo, kad tai buvo ne gal efektyviausias algoritmas. Ir iš tiesų, tiesą sakant, aš prakaitavimas visi daugiau vaikščioti pirmyn ir atgal. Tai nesijautė itin efektyvus. Taigi pabandykime ką nors kita. Jei vaikinai galėtų iš naujo patys šių aštuonių vertybių. Geras darbas. 

Paimkime pažvelgti skaitmeniniu, nes tik akimirka prieš mums pabandyti kažką kita, ką tik atsitiko. Iki čia, jūs ketinate pamatyti vizualizacija šių aštuonių žmonių , kai mėlyna ir raudona barai atstovauti numerius. Aukštesni baras, didesnis skaičius. Trumpesnis baras, mažesnis skaičius. Ir ką jūs ketinate pamatyti yra atsitiktine tvarka daugiau nei aštuoni iš jų. Jūs ketinate žiūrėti šiuos barai gauti surūšiuoti pagal tą patį algoritmą, arba nustatyti nurodymų, kurie mes paskambinsime šiol burbulas rūšiuoti. Taigi pastebėti, kas antras, arba tiek, du barai, yra apšviesti raudonai, yra palyginti kompiuteriu. Ir tada, jei didelis baras, mažai baras neveikia, jie yra pavertė mane. 

Dabar tai yra neįtikėtinai varginantis žiūrėti tai, žinoma, labai ilgai, bet pastebėsite, takeaway-- stambių barų persikelia į dešinę, mažai barai juda į kairę. Leiskite nutraukti šį procesą, ir pagreitinti tai padaryti bus daug greičiau, todėl mes galime gauti aukšto lygio jausmą, ką, Iš tiesų, burbulas tarsi daro. Iš tiesų, tai burbuliuoja iki dešinė pusė sąrašo arba masyvas, didesnių barai. Ir atvirkščiai, mažai barai burbuliuoja savo kelią žemyn į kairę, nors ir sparčiau kaip mes anksčiau padarė. Taigi, sunkiau pamatyti su žmonėmis, bet vizualiai tai tikrai ką vyksta. 

Bet pabandykime iš esmės Kitoks požiūris dabar. Pabandykime skiriasi algoritmas, pagal kurį mes turime jums vaikinai pradėti jų originalus pozicijos, kurios buvo šis įsakymas čia. Ir tegul eiti į priekį dabar. Ir aš ruošiuosi daryti kažką dar paprasčiau, tiesa? Žvelgiant atgal, keičiant poromis vėl ir vėl, beveik tiek protingas. Padarykim ką dar naiviai, kur, jei aš noriu sutvarkyti šie žmonės, leiskite man tiesiog nuolat ieško už mažiausio elemento. Taigi dabar, 4 yra Mažiausiai aš mačiau. Aš ruošiuosi prisiminti. Ne, 2 yra geriau, ir prisiminti, kad. 1 yra dar mažesnė. 3, 7, 5. Gerai. One-- koks tavo vardas dar kartą? 

Artie: Artie. 

DAVID Malan: Artie. Taigi, Artie, eiti į priekį. Aš ruošiuosi traukti jus iš linijos. Jei galėtumėte grįžti čia. Ir man reikia, kad paliktume jį. Mes turime sprendimą tašką čia. Kaip mes galime padaryti kambarį už Artie čia pradžioje, kur skaičius 1 priklauso? 

PUBLIKA: Shift ". 

DAVID Malan: Gerai, mes galėtų perkelti visus. Bet siūlyti optimizavimas. Tai jaučiasi šiek tiek erzina man užduoti keturi žmonės pereiti visą kelią žemyn. Ką dar galėčiau padaryti? 

PUBLIKA: juos Switch. 

DAVID Malan: Perjungti juos. Ir koks tavo vardas dar kartą? 

JACOB: "Jokūbas". DAVID Malan: Jokūbas, judėti. Daug efektyviau tiesiog turėti Jokūbas apsikeitimo vietų su Artie, , palyginti su verčia visi keturi šių žmonių, labai ačiū, kad jų teisinga pozicija. Kas malonu apie Artie dabar jis savo teisingą padėtį. Leiskite tai padaryti dar kartą. 2, tai mažiausias skaičius Mačiau. 3, 7, 5. Gerai. 2 yra tikrai mažiausios. Negalima daryti bet kokį darbą. Darom vėl. 6. Mažiausias? 8. Nope. 4? Ooh. Leiskite man prisiminti 4. 3. Leiskite man prisiminti 3. 7, 5. Mažiausias skaičius aš matyti šį perdavimą yra 3. Jei norite ateiti iš. Kur mes einame, kad Jums? Ir koks tavo vardas? 

Alanna: Alanna. 

DAVID Malan: Alanna, mes teks iškeldinti jus. Bet tai yra efektyvesnis, tiesiog sukeisti du žmones, nei turėti kelis žmones iš tikrųjų išsisukti daugiau. Dabar galime tai padaryti dar kartą. Aš ruošiuosi pasirinkti 4, todėl ateiti iš. Ir kas vyksta judėti? Taškų 8, žinoma. Jeigu aš dabar rasti skaičių 5, nagi iš. Taškų 8 ketina gauti iškeldinti dar kartą. Aš dabar ketina rasti skaičių 6 vietoje. 7 vietoje. 8 vietoje. 

Ką mes tiesiog padarė dabar kažkas vadinamas atranka tarsi, ir jei mes vizualizuoti tai, tai ketina jaustis šiek tiek skiriasi. Vykime į priekį ir iš to meniu čia, tai visualization-- tegul tai pakeisti to-- Nagi, Firefox. Leiskite jį pakeisti atrankos rūšiuoti. Ir tegul jį pagreitinti, kaip ir anksčiau, ir pradėti vizualizuoti dabar. Ir tai algoritmas yra skiriasi feel it. Dėl kiekvienos iteracijos, tiesą sakant, tai dar labiau paprasta. Aš tiesiog pasirinkdami mažiausias elementas. Dabar, tiesą sakant, aš turiu šiek tiek pasisekė, kad kartą, kad ji rūšiuojami super greitai. Elementai buvo atsitiktinis. Tai nėra, kaip mes galų gale matyti, iš esmės greičiau. Bet pažiūrėkime, trečiasis ir paskutinis požiūris čia, kaip į tai, kas vyksta. Taigi eikime į priekį ir iš naujo jums, vaikinai vienas galutinis laikas būtų tokia tvarka čia. 

Ir dabar, aš ruošiuosi būti šiek tiek daugiau protingas, tiesiog baigia savo algoritmus. Aš ruošiuosi tai padaryti. Aš ruošiuosi ne eiti pirmyn ir atgal tiek daug. Atvirai kalbant, aš pavargau visa tai važiuojantiems. Aš tik ketina imtis, ką aš duotas sąrašo pradžioje ir aš ruošiuosi rūšiuoti kad tada ir ten. Taigi čia mes esame. Taškų 4. Aš ruošiuosi įdėti skaičių 4 į rūšiuojami sąraše. Atlikta. Aš teigia ir dabar, o tik, kad tai daugiau aišku, tai mano sąrašo dalis rūšiuojamos. Tai koks kvailas reikalavimo, tačiau iš tiesų 4 yra rūšiuojami nuo dydžio vieną sąrašą. Dabar aš ruošiuosi imtis numeris 2. Taškų 2 Aš dabar ketina įdėti į tinkamą vietą. Taigi, kur veikia 2 priklauso? Akivaizdu, kad čia. Taigi pirmyn ir judėti pirmyn, jei gali. Ir kodėl gi ne jums, vaikinai tiesiog jūsų muzika išsiskiria su jumis šį kartą. Ir tegul prievarta įrašyti jums į Sąrašo pradžioje. Taigi šiek tiek daugiau darbo. Turėjau pereiti Jokūbą aplink, ir koks tavo vardas? 

AMIN: Amin. 

DAVID Malan: Amin. Bet bent jau aš ne eiti į priekį ir atgal. Aš tik atsižvelgiant dalykų, kaip aš einu. Aš tiesiog įdėti juos į tinkamą vietą. 6, iš tikrųjų tai yra gana lengva. Leiskite įdėti tave ten, jei tiesiog norėjau šiek tiek peržengti. Taškų 8, taip pat gana lengva. Teisė ten. Velnias. Skaičius 1, mes galime ne tik apsikeitimo su Amin čia nes tai vyksta bałagan užsakymo. Taigi, mes turime būti šiek tiek daugiau protingas. Taigi, Artie, jei galėtų atsarginę kopiją akimirką. Vykime į priekį ir pereiti dabar skirtingai nuo mūsų ankstesnių algoritmų, padaryti kambarį Artie čia pradžioje. Taigi tuo dienos pabaigoje, aš natūra daryti tai, ką aš norėjau, kad būtų išvengta anksčiau. Ir taip mano algoritmas yra tarsi iš atstatomi, intelektualiai, iš to, ką jis iš pradžių buvo. Aš tiesiog daro perjungti kitu klausimu. Dabar aš ne 3. O damn. Turime vėl padaryti daugiau darbo. Taigi leiskite stumti jums. Pereikime 8, 6, 4-- oh oh-- ir 3 ketina eiti tiesiai ten. Taigi bent šiek tiek sutaupyti šį laiką. 7, o ne per daug darbo turi būti padaryta. Taigi, jei norite, kad pop atgal, tegul įdėti ". Ir galiausiai, 5, jei jums norite pop atgal, mes reikia perkelti jus, jus, tu, kol penkių yra vietoje. 

Taigi dabar tai pamatyti adresu aukšto lygio grafiškai, darykime šį algoritmą vizualizacija vienas papildomas laikas. Taigi, tai mes vadiname įterpimo rūšiuoti. Mes paleisti jį kaip greitai, ir pradėti jį čia. Ir tai taip pat turi skirtingą įspūdį. Tai tarsi vis geriau ir geriau, bet tai niekada tobula kol aš eiti ir sklandžiai tose spragas. Nes, vėlgi, aš tik atsižvelgiant, kas Aš skiriant iš kairės į dešinę. Taigi, aš negavau taip pasisekė kad viskas buvo tobula. Štai kodėl mes turėjome tai mažai mispositions kad ilgalaikis laikui bėgant. 

Taigi visų šių algoritmų atrodo paleisti šiek tiek skirtingais tempais. Tiesą sakant, kuri jums pasakyti geriausias ar sparčiausiai iki šiol? Burbulas rūšiuoti, pirmas? Atrankos tarsi, antrasis? Insertion sort, trečia? Girdžiu kai atrankos rūšių. Kitos mintys? 

Taigi paaiškėja, kad visų šių algoritmų yra iš esmės toks pat efektyvus, kaip kiekvienas other-- arba, atvirkščiai, kaip neefektyvus, nes viena nuo kitos, nes mes galime padaryti iš esmės geriau nei visi trys Šių algoritmų. Ir tai iš balto melo tiek, per daug. kai aš sakau, kaip efektyvus arba kaip neefektyvus, tai bent super didelės vertės n. Kai mes turime tik aštuoni žmonės čia o gal 50 ar panašiai barai ekrane, jūs visiškai pastebėsite skirtumus tarp šių trijų algoritmų. Bet kaip n, žmonių skaičius, arba numerių skaičius, arba žmonių skaičius telefoną knyga, arba tinklalapių skaičius "Google" duomenų bazėje gauna didesni ir didesni, matysime, kad visi šie trys algoritmai yra tikrai gana prasta. Ir mes galime padaryti iš esmės geriau nei tai. 

Leiskite pažvelgti, pagaliau, ką šie algoritmai might skamba kaip iš kontekstas keletą kitų taip pat taikant šį vizualizacija čia kad bus pristatyti mums algoritmų skaičius. Vykime į priekį ir pasveikinti mūsų dalyviai čia, visi iš jų rūšiuoti save labai gerai. Jei norite imtis atsisveikinimo dovaną. Jūs galite laikyti savo numerius, taip pat. Ir tai, ką jūs pamatysite, ar veikiau išgirsti, dabar, yra tas, kad mes įdėti garsai Kiekvieną iš šių barų ir susieti ją su programine įranga, skiriasi dažnis garso, galite wrap savo proto daugiau audioly aplink tai, ką kiekvienas iš šių dalykų atrodyti. Iš kurių pirmasis yra įterpimo rūšiuoti 

[TONES] 

Tai burbulas rūšiuoti. 

[TONES] 

Atrankos rikiuoti. 

[TONES] 

Kažkas pavadino sujungti rūšiuoti. 

[TONES] 

Gnome rikiuoti. 

[TONES] 

Štai jį CS50. Pamatysime jus trečiadienį. 

Narrator: O dabar, "Deep Mintys ", pagal Daven Farnham. Kodėl tai už linijos? Kodėl gi ne padaryti jį geriau? Norėčiau padaryti penkis kilpą. 

[Juokas]