DAVID MALAN: Okei. Tämä on siis CS50, ja tämä on nyt alussa viikolla kolme. Joten tähän asti olemme kirjoittanut ohjelmia C että näyttää hieman jotain tällaista täällä. Joten meillä pari terävä sisältää huipulla. Meillä int, tärkein, mitätön, ja Sitten jotain tekemistä keskellä, jotkut hieman koodin sisällä Tämän toiminnon. Mutta avain on ollut se, että olemme sanoneet mitätön täällä. Niin mitätön, kaiken tämän ajan, täsmennetään että tämä ohjelma, kun ajaa, voidaan suorittaa vain kautta nimensä. Et voi kirjoittaa muita sanoja tai numerot jälkeen ohjelman nimi, kun käynnissä se. Niinpä esimerkiksi, jos ohjelma olisi kootaan tiedosto nimeltä Hei, voisit tehdä ./hello, mutta se on se. 

Ainoa tapa, jolla voisit hyödynnetään tässä ohjelmassa on soittamalla toiminto. Esimerkiksi mitä toimintoa olemme käyttäneet tähän mennessä saada käyttäjän syötettä? 

Yleisö: Get merkkijono. DAVID MALAN: Saada merkkijono, tai saada int, tai olet nähnyt muita, vaikka et ole käyttänyt niitä vielä, kuten saada pitkä, pitkä ja vastaavat. Mutta oletetaan, että me todella haluavat aloittaa kirjallisesti ohjelmia, jotka ovat hieman monipuolinen, ja suoraan sanoen hieman kuten komennot, jotka olet ollut saada, toivottavasti hieman tottunut. Kuten cd tilaa Dropbox. Tämä tietenkin, muutokset hakemistoon, olettaen olet John Harvardin kotona hakemistoon, Dropbox-kansioon. Samalla tätä komentoa luo uuden hakemiston nimeltä pset2, Kuten ehkä jo tai tulee pian ongelma asettaa kaksi. Tee Hei, tietenkin, on komento joka rakentaa ohjelma nimeltä hei tiedostosta nimeltä Hello piste c. Ja kussakin näistä tapauksissa, nyt meillä on ollut tarjoavat väitteen ns komentoriviltä, ​​vilkkuu nopea, jotta make tietää mitä rakentaa, ja niin että mkdir tietää mitä kansioita ja luoda, ja niin, että cd tietää jos haluat mennä. Mutta tähän asti, pidämme sanomalla että tärkein, oletusselain toiminto, on mitätön ilme sisällä näitä sulkuja, mikä tarkoittaa, että se ei voi mitään perusteluja. 

Joten alkaa tänään, mitä aiomme tehdä on, aiomme aloittaa tukevat näitä asioita vielä. Itse asiassa tässä tapauksessa, johon ei yleensä käsin kirjoittaa, Tee on tehnyt tätä Meille ei ole yksi mutta yksi, kaksi, kolme ylimääräistä jouset jälkeen ohjelman nimeksi kalahtaa. Miten siis saavuttaa tämän? 

No, alkaa tänään, tapauksissa, joissa haluamme tarjota aineksia kautta niin kutsuttu komentorivi, aiomme aloittaa lisäämällä Tässä mitä on yellow-- korvaa mitättömiksi int argc pilkulla string argv alkusulkumerkki alkusulkumerkki. Nyt tämä on mielenkiintoinen pari syistä. Yksi, se tulee olkaamme kirjoittaa ohjelmia, jotka ovat hieman dynaamisempaa. Mutta, enemmän vetoavasti, se tulee avata nyt keskustelu siitä, mitä taulukot voi todella käyttää, mitä merkkijonon todella on alla huppu, vasta ensi viikolla, kun alamme sukellus ja jopa syvemmälle, kuinka kone on että kaikki tätä kamaa työtä. Mutta nyt, nyt piirtää, ehkä kuva. 

Kun kirjoitat ohjelmaa tärkeimpien julisti tällä tavalla, siten, että pääasiallinen ottaa kaksi argumenttia, int ja-- mitä tietotyyppi on toinen argumentti? 

Yleisö: Array. DAVID MALAN: Array. Joten se näyttää ensi silmäyksellä kuin se on merkkijono, mutta huomaa hakasulkeissa. Muistaa viime kerralla esittelimme käsitettä jono. Ja taulukot käyttää hakasulkeissa pari yhteyksissä. Voit käyttää neliö Suluissa mennä array ja saada erityinen tekijä, kuten kannatin 0 tai kannatin 1 tai kiinnike 2. Mutta näimme, jos lyhyesti, viime viikolla, että tekin käyttää näitä hakasuluissa julistaa koko joukko, Jos tiedät etukäteen, kuinka monta ints tai kuinka monta jouset tai mitä todella haluavat. Joten se kääntyy siellä n kolmasosaa yhteydessä täällä että ei ole numero sisällä neliön suluissa. Kun määrittelet, koska minulla on täällä, nimeä jotain argv, joka on vain hieno tapa sanoen väite vektori, joka on toinen hieno tapa sanoen joukko väitteitä, alkusulkumerkki alkusulkumerkki vain tarkoittaa sitä, että et välttämättä tietää etukäteen, kuinka suuri matriisi tulee olemaan, mutta tiedät, että se tulee olemaan jono. Joten jos et tiedä numero älä laita sitä sinne, varten alkusulkumerkki alkusulkumerkki tarkoittaa, että argv ei ole merkkijono, mutta Merkkijonotaulukko. Niin syntaktisesti, jos muistelen viime viikolla, se on hyvin samankaltainen kuin sanomalla jotain int ikäisille alkusulkumerkki, ja sitten jotain sen jälkeen. Mitä tämä näyttää? Katsotaanpa itse piirtää kuvan. Joten kun ajaa ohjelman Main ottaa kaksi argumenttia määritelty sisällä Näiden sulkuja, voit olennaisesti vähintään kaksi paloina muistia luovutetaan sinulle alla huppu. Yksi, koska Tulen tasapeliä kuin tämän suorakulmion, aiotaan kutsutaan argc. Ja yhtä nopea kertaus, mikä on tietojen tyyppi argc? Joten se on int. Niin numero tulee mennä argc-- kierrosta että sanoista argumentti count. Samalla olen laatinut argv kuin array. Ja en todellakaan tiedä kuinka kauan se tulee olemaan, niin nykypäivän tarkoituksia dot dot dot. Se saattaa saada joidenkin pituudesta. Mutta olen tässä kuvassa vähintään neljä suorakulmioita. Joten argv kimpale muisti, joka tallentaa string merkkijono dot dot dot, ja argc on vain yksi murikka muistia kokonaisluku. 

Joten nyt, olkaamme hieman tarkempi. Jos, kun minulla on jouset Tässä array, nimeltään argv, haluan saada niitä yksilöllisesti, aivan kuten viime viikolla, aiomme käyttää merkintätapaa kuten argv kiinnike 0 saada ensimmäinen asia array. Argv kiinnike 1 päästä Toinen asia, ja niin edelleen. Tärkeintä tässä on, että olemme edelleen 0 indexed-- olemme yhä laskien 0. Joten nyt Katsotaanpa todella laittaa jotain tässä. Jos olisin koota ohjelma nimeltä hello tiedosto nimeltä Hei piste c, ja sitten juoksen, että ohjelma DOT slash hei, mitä minun tietokone, minun laptop, näyttää alla huppu hetkellä juoksen piste slash hei ja paina Enter? No, tämä on ehkä mitä voisimme kuvata kuten sisällön tietokoneen muisti, tai RAM-- Random Access Memory. Toisin sanoen, tietokone, jotenkin sinulle maagisesti, tuo numero 1 argc, AKA argcount, ja se asettaa kirjaimellisesti merkkijonon ./hello in argv kiinnike 0. Minulla ei ole aavistustakaan, rehellisesti, mitä in argv kiinnike 1 tai 2 tai 3, koska jos käyttäjä ei ole kirjoittanut mitään lisäksi ./hello, aiomme olettaa, että nämä todennäköisimmin roskaa arvot, niin sanoakseni. Nämä paloina muistia olemassa, mutta se ei ole meidän tarkastella niitä, koska argcount on vain yksi. 

Nyt puolestaan, jos minä kirjoittaa suorittaa toisen ohjelman, CD-soitin, joka on asianmukaisesti komennon, Kirjoita vilkkuu prompt-- cd tilaa Dropbox-- kun ajaa että, tehokkaasti, Kun CD-ohjelma käynnistetään, argc, sisällä minun tietokoneen muistiin, on eniten briefest toinen numero 2. Ja sitten argv kiinnike o on CD, argv kiinnike 1 on Dropbox, ja sitten tietysti komento valmis, joten kaikki tämä muisti olennaisesti menee pois ja käytetään jotain muuta. Ja siksi sanon vain sekunnin murto. 

Samaan aikaan, jos teemme mkdir pset2, kuva näyttää lähes sama, mutta eri jouset sisällä argv. Jos teen kalahtaa viiva hei Hei piste C, sama idea. Enemmän tavaraa täytetään varten argv, ja argc, on tietenkin 4. Eli toisin sanoen, vaikka tämä joukko ehkä dot dot dot, joidenkin vaihtelevan pituuden, niin sanoakseni, tiedät aina, missä lopussa se on, koska argc tulee kertoa missä vaiheessa sinun pitää lopettaa katsot elementtejä argv. Voit vain katsoa neljä yhteensä tässä tapauksessa. 

Joten nyt katsomaan, ehkä, yksinkertainen ohjelma. Joka vain sanoo hei joku kuten Zamyla. Joten väitän aion kirjoittaa ohjelman vain hetken, jonka kautta voisin tehdä ./hello tilaa Zamyla, ja sitten haluan Oma ohjelma tulostaa jotain Super-yksinkertainen kuten "Hei, Zamyla." Nyt aikaisemmin olemme käyttäneet getstring. Niin menneisyydessä, vaikka olet uusi ohjelma, kertoimet ovat voit lietsoa ohjelma, joka käyttää getstring ja käyttää sitten Printf moikkaamaan Zamyla. Mutta ei käytä getstring tällä kertaa. Saanen sen sijaan mennä Appliant ja älä vakiovarusteista I O dot tuntia. Saanen myös CS50 piste tuntia. Nyt int main, ja nyt olen aio tehdä mitätön tänään. Sen sijaan aion tehdä int argc string argv alkusulkumerkki alkusulkumerkki, ei määriteltiin joukko. Ja nyt täällä on minun niin kutsuttu tekemään. Mitä aion tehdä nyt, minä olen aikoo tehdä hieman uskonharppaus Aion olettaa, että käyttäjän aio käyttää tätä ohjelmaa oikein, ja olen vain menossa do printf Hei,% sn. Joten mitään uutta siellä. Mutta haluan nyt laittaa mitä sana käyttäjätyypit jälkeen ohjelman nimi. Joten jos en ./hello tilaa Zamyla, minä haluavat jotenkin ohjelmallisesti Lainaan lainaus "Zamyla." niin minä voi mennä minun argumentti vektori, minun Merkkijonotaulukko, ja jos komento, jälleen, oli ./hello tilaa Zamyla, mitä numero haluanko laittaa argv täällä? Yleisö: 1. DAVID MALAN: 1, koska kiinnike 0 osoittautuu tulee olemaan Ohjelman nimi, kuten näimme. Joten kiinnike 1 on ensimmäinen sana että minä, käyttäjä, on kirjoittanut. Aion mennä eteenpäin ja tallentaa. Aion mennä minun kansioon missä Olen asettanut tämän tiedoston. Aion tehdä tehdä hei 3. Comp IO on kunnossa. ./hello Zamyla Enter. Mitä tein väärin? Olin yllätettiin itseäni vain hetken siellä. Mitä tein väärin? 

Yleisö: Nimi. 

DAVID MALAN: tiedoston erotuksesta hello3.c. Ja tein sen vain johdonmukaisuus, koska olemme oli hello.c n menneisyyden online koodin. Joten korjata ./hello kiinnike viiva 3 Zamyla. Enter. Ja nyt meillä on hei, Zamyla. Samalla voin vaihtaa tätä olla Rob, tai oikeastaan ​​mikä tahansa muu sana. 

Mutta katsotaanpa harkita nurkkaan tapaus. Mikä voisi odotat tapahtuu, jos En kirjoita kenenkään nimeä ollenkaan? 

Yleisö: Virhe. 

DAVID MALAN: virhe jonkinlaisia, ehkä. Katsotaanpa. Enter. Null. Joten printf siitä tosiasiallisesti pieni suojaava meistä täällä, ja kirjaimellisesti tulostus avoin paren null, mutta vielä pahempaa asioita voi tapahtua. Ja juuri osoittamaan jotain aivan ei pitäisi tehdä, mennään sisään täällä ja alkaa tönäisi ympärillä. Oikea? Jos tiedän, että kuvaa muisti on olennaisesti tätä, argv kiinnike 1 on Zamyla, argv kiinnike 0 on ./hello, tai ./hello-3. Mikä on kiinnike 2? Joten en voi vastata, että kyseenalaistaa itseni, eikö? Voin vain muuttaa 1 2. Voin nyt uudelleenkääntää Hei 3, ./hello3 Katsotaanpa lähentää ja paina Enter. Oho. Ei lainausmerkki. Mielenkiintoinen. Niin, että on tavallaan siistiä mitä muuta on täällä. 

Joten mitä muuta on sisällä minun laptop? Säästetään se kiinnike 3. Tee hello3, ./hello-3. Utelias. Ja nyt mennään todella bold-- 50. Niin, että todella sukellus syvälle minun tietokoneen muistiin. 50 indeksit. Joten hei 3 ./hello-3. Utelias. Okei, nyt olen vain menossa holtiton. Mennään 5000. Kunnossa. Haluan siis käännä uudelleen. Tee hello3, ./hello-3. OK. Nyt jotkut teistä, saattaa olla lamppu menee pois. Kuinka moni teistä on nähnyt tämän viestin ennen? OK. Niin, miksi? 

Kerroin are-- ja siellä erilainen asioita, jotka voivat aiheuttaa tämän, ja selvästi olet hyvässä company-- meillä on selvästi aiheutti mitä kutsutaan segmentointi vika. Ja pitkän tarinan lyhyesti tänään, minä ovat käsitelleet segmentti muistia että minun ei pitäisi olla. Jos segmentti tarkoittaa vain kimpale muistin, että minun ei pitäisi olla. Nyt tietokoneen takaa, että jos minä run ./helloZamyla että voin koskettaa argv olla teline 0 ja argv kiinnike 1. Mutta argc on arvo 2, joka tarkoittaa, että minä olen vain allowed-- se on tavallaan kunnia system-- koskettaa kannatin 0 ja kiinnike 1. Jos menen pitemmälle, siellä ehdottomasti olemaan muistia siellä. Oma RAM on fyysisesti olemassa tietokoneeseen. Mutta kuka tietää mitä siellä on? Itse olen käynnissä useita ohjelmia kerrallaan. Saatan olla seen-- jos en Näin on Appliant mutta Macin tai PC-- voisin olla nähnyt sisältöä sähköpostitse. Olen ehkä nähnyt hetkessä Viestin Olen viime aikoina lähettänyt. Mitään, mikä voisi olla viipyvä noin muistissa olisi näytetty tapa tämä mielivaltainen hakasulkeen merkintätapa. Tai vielä pahempaa, saatat olla löytyi yksi minun salasanoja että olisin viime aikoina kirjoitettu, että ohjelma oli tallennettu muistiin niin todentamaan minulle, ja sitten vain sellainen jätti RAM kunnes lopetin kyseisen ohjelman. 

Ja todellakin, tämä on yksi vaaran ja yksi valtuuksia käyttää kieltä kuin C. Sinulla on esteetön pääsy koko sisältö ohjelman muistiin, ja mitä roistoja voi jopa tehdä niissä cases-- varsinkin kun me päästä web ohjelmointi loppupuolella lukukauden, me palata tähän topic-- on penkoa, mahdollisesti jonkun tietokoneen muistia ja löytää sellainen utelias asioita kuten näimme siellä. Tai vielä pahempaa vielä, salasanoja, jotka hän tai hän voi sitten käyttää tehdä pahoja asioita. 

Niin selvästi Minun ei olisi pitänyt tehdä tätä, koska outoja asioita alkaa tapahtua. Todellakin, tämä on ohjelma kaatuu. Tämä olisi vastaava Mac OS tai Windows Ohjelman ikkuna vain katoaa. Odottamaton virhe. Vuonna komentorivin ympäristö näemme jotain tällaista. Mutta siksi on olen yksinkertaisesti koskettamalla muistia, joka ei kuulu minulle. 

Joten puolustaa vastaan hieman eri tavalla katsomalla tästä ohjelmasta. Niin, jälleen, luuranko että näimme earlier-- ja olen korostanut tällä kertaa int. Ja koko tämän ajan tärkein on todellakin palasi arvo. Vaikka useimmissa luento Esimerkkejä olemme kertaakaan käytetty Palaa mitään main. Olemme vain kirjoittaa printf lähellä kihara ahdin ja se on siinä. Mutta ilmaiseksi, mitä kääntäjä tehnyt sinulle, tehokkaasti, on palaamassa 0 sinulle. Kääntyy out-- ja se on hieman counterintuitive--, että 0 on hyvä. Se ei tarkoita vääriä sinänsä. 0 on hyvä, ja ei-0 arvo, maailma on päättänyt, voi merkitä virhettä. Joten jos olet joskus sekaisin jotain tietokoneeseen, tai ohjelma on juuri kuollut teitä ja olet saanut joitakin virheellisiä ikkuna näytön sanoen virhe negatiivinen 49 tai virhe 23-- jotkut melko sattumanvarainen value-- se koska ohjelmoija on koodannut arvo kuin negatiivinen 49 tai positiivinen 23 edustaa mitä tahansa määrää, uskallan sanoa, 4 miljardin mahdolliset asiat että voisi mennä pieleen ohjelmaan. 

Joten miten voisin ottaa hyödyntää tätä itse? No, minäpä avata ohjelman että olen kirjoittanut aiemmin, ja penkoa verkossa nimeltään Hei 4. Ja se on lähes identtinen, paitsi että sen sai hieman virheiden tarkkailun. Tässä tapauksessa olen taas julisti Tärkein kuin ottaa kaksi argumenttia, mutta tällä kertaa linjalla 17, huomautus Teen vähän järki tarkistaa. Olen varmista, että argc vastaa yhtä kuin 2. Koska jos se on, että tarkoittaa, että voin turvallisesti koskettaa paitsi kiinnike 0, mutta kiinnike 1. Ja menen eteenpäin ja tulostaa, Tässä tapauksessa Zamyla tai Rob tai mitä sanaa olen kirjoittanut ulos. Ja nyt vain saada hieman enemmän oikea, Aion nimenomaisesti palata 0 merkitä kaikki on hyvin. Mitään pahaa tapahtunut. 

Mutta sopimuksen mukaan, aion palauttaa 1, tai suoraan sanottuna ei-0-arvo, jos jotain meni pieleen. Nyt käyttäjä ei tule todella huomaa mitä tapahtuu. Tosin jos menen tähän hakemistoon, me lähentää ja tekevät Hei 4, ./hello-4 Zamyla käyttäytyy kuin odotan. Mutta jos sen sijaan älä kirjoita mitään, mikään ei tunnu tapahtuvan, mutta se ei kaadu. Ja jos minä sen sijaan tehdä jotain kuten Rob on Proctor in Thayer-- jakaminen mielivaltaisia ​​tietoja. Mutta ilmoitus, argv 1, 2, 3, 4, ja 5 pitäisi nyt olla muistissa. Sekin, ei mitä Oma ohjelma odottaa, koska olen tarkistanut, onko argc vastaa = 2 tai ei. Joten olen nyt puolustaen tätä. 

Nyt, kuten syrjään, me programmer-- tai pikemminkin me users-- koskaan näe, että 0 tai 1, mutta käyttämällä työkalu nimeltään viankorjaus, tai muita välineitä, kuten tulemme näkemään ennen kauan, olet ohjelmoija voi itse nähdä, mitä voisi olla pielessä sisällä oman ohjelman. 

Joten kysyttävää argc? Joo. 

Yleisö: Olen nähnyt missä he ei ole ollut merkki, [kuulumaton] juuri sanoi merkkijono tähti d, kuten merkin tähdellä pilkku. Ovatko he vastaavat täällä? 

DAVID MALAN: He ovat. Joten kysymys kuuluu, sinulla on joskus nähnyt ohjelmat näin, että ei sanoa merkkijono argv kiinnike vaan sanoa jotain kuten nieriä tähti argv kiinnike. Ja siellä on jopa muita variantteja, saatat nähdä. Ne ovat todella vastaavat. Nyt meillä on nämä tavallaan apupyörät on muodossa merkkijonon CS50 kirjasto, mutta reilussa viikossa tai niin aiomme poistaa että tukos kokonaan ja todellisuudessa katsokaa mitä nieriää ja tähti ovat, ja miten ne liittyvät muistin edustus yleisemmin. Niin me palaamme siihen. 

Muihin kysymyksiin meidän argv tai argc? Joo. Yleisö: Miksi se palaa error [äänetön]? DAVID MALAN: Miksi se palauttaa virheen only-- oh! Edellisessä tapauksessa, kun olivat futzing noin muistilla, miksi se vain palauttaa virheen kun olen todella kirjoittanut iso numero? Lyhyt vastaus on, me vain onnekas. Yleisesti ottaen, tietokone varaa muistia paloina, ja se antoi minulle tarpeeksi iso kimpale että Sain pois, kenenkään huomaamatta, koskettaa kiinnike 2, kannatin 3, kiinnike 50, mutta heti kun työnsin onneani, menin pidemmälle rajat kimpale muistia käyttöjärjestelmä oli antanut minulle. Ja silloin se tukahduttaa ja sanoi, ei. Segmentointi virhe. Joo. 

Yleisö: Miten tietokone tietää arvo argc? 

DAVID MALAN: Miten tietokone tietää arvo argc? Kun käynnistät ohjelman, joka ohjelma, luonteen mukaan vilkkuu nopea, luovutetaan joukko sanoja, jotka kirjoitetaan kehotteeseen, että oli kirjoitetun nopeaa. Ja niin se on käyttöjärjestelmä joka olennaisesti asuttujen pääasialliset väitteet sinulle. Niin, että yksi palveluista että saat, tavallaan salaa alla huppu käyttöjärjestelmä. Muita kysymyksiä? Joo. 

Yleisö: Mitä core dump tarkoittaa? DAVID MALAN: Mitä core dump tarkoittaa? Niin se on hyvä kysymys. Ja anna minun mennä takaisin tähän hakemistoon täällä. Ja huomaat, että Minulla on uusi tiedosto sinne. Se on todellakin kutsutaan ydin, ja se on todella tyypillisesti kunnon kokoinen tiedosto. Se on pohjimmiltaan tilannekuva sisältö minun ohjelman muistiin tai RAM kun se kaatui. Ja tämä on hyödyllistä, mahdollisesti diagnostisesti, kun puhumme tulevaisuudessa luento ja osio virheenkorjaus, koska voit itse tehdä vastaa digitaalisen ruumiinavaus kyseisestä tiedostosta auttaa selvittää mitä teit väärin ohjelmaan. Joo. 

Yleisö: Onko argc komento itse, tai voi you name it jotain? 

DAVID MALAN: Hyvä kysymys. On argc komennon itsessään, tai voi you name it jotain? Se ei todellakaan ole komentoa. Se on yksinkertaisesti muuttujan nimi tai argumentti nimi, ja niin ehdottomasti meidän voisi kutsua tätä foo, voisimme kutsua tätä baari, jotka yleensä olla go-sanoja, jotka tietokone tiedemies menee. Mutta sopimuksen mukaan, käytämme argc ja argv. Mutta se on vain ihmisen yleissopimus, ei muuta. Kunnossa. Niin osoittautuu, olen ollut kertoo hieman valkoinen lie-- ja rehellisesti, tulevaisuudessa, näet olemme kertoneet muiden valkoisten valheiden. Mutta nyt olemme menossa kuoria takaisin yksi näistä. Tässä tapauksessa tässä kun olen aiemmin juoksi ohjelmaa kuten ./hello tai ./hello-3 Zamyla, meillä oli sisältö minun tietokoneen muistiin näköinen kutakuinkin tätä. Mutta muista mitä merkkijono on. Mitä sanomme viikko sitten mitä merkkijono todella on alla huppu? Yleisö: Array merkkiä. DAVID MALAN: Se joukko merkkiä, eikö? Joten saatamme olla erilaisia jouset, mutta puolestaan ​​merkkijono on joukko merkkejä. Joten jos en todellakaan halua olla anaali kun piirrän tätä kuvaa, Olisin todella piirustus se vähän enemmän kuin tämä, jolloin kussakin näistä indeksit minun argv array, on itse koko jono että itse on jono. Ja nyt valkoinen valhe kerromme tänään on, että kuva ei näyttää aivan kuten tämä. Itse asiassa, pikku neliöt ovat tyypillisesti ulkopuolella iso suorakaide siellä. Mutta me palaamme että ennen pitkää. Mutta tämä on ./hello kenoviiva 0, että on erityinen merkki, joka rajataan loppuun merkkijonon, ja meillä on toinen jälkeen Zamyla nimi. Mitä tämä tarkoittaa? 

No, anna minun mennä eteenpäin ja avata kaksi muuta esimerkkiä jotka ovat saatavilla verkossa. Yksi on nimeltään argv1.c ja toinen on argv2. Se on erittäin yksinkertainen ohjelma, joka eroaa aiemmista ohjelmista että nyt olen käyttäen argc ja argv täällä. Ja nyt olen integroituminen silmukka linjassa 18, alkaen i = 0 jopa argc. Ja mitä aion tehdä Tämän rivi koodia täällä? Englanti. Tämä tietysti osoittaa käytön argc. Mutta Englanti, mitä se tehdä, jos en suorita tämä ohjelma? Joo? 

Yleisö: Se tulee tulostaa näytön niin monta kertaa kuin haluat. DAVID MALAN: Aivan. Niin mitä sanoja minä kirjoita kehotteeseen, se on menossa oksentaa ne minulle yksi riviä kohden. Joten mene eteenpäin ja tehdä tämän. Anna minun mennä minun hakemistoon ja eivät tee argv1 ./argv1. Ja nyt, nyt pitää se yksinkertainen. Tehdään mitään aluksi. Se teki tulostaa yksi asia, ja se on todellakin ohjelman nimi, koska se on kiinnike 0. Jos minä nyt sanon foo, se tulee tehdä nämä kaksi, ja jos sanon foo bar, se aikoo sanoa ne kolme asiaa. Nyt se on hieman mielenkiintoinen, ehkä. Mutta muistuttaa, että argv on Merkkijonotaulukko, mutta jono on joukko merkkiä, jotta voimme asioita lovi ja soveltaa että perus logiikan ja tehdä koodia, joka näyttää hieman arvoituksellisesti, tosin. Vaan siksi, että sisäkkäisiä silmukka, jotain sukua mitä saatat muistaa Mario, esimerkiksi, jos teit sen tällä tavalla. 

Joten nyt huomaa linjalla 19, olen jälleen iteroidessaan yli minun argumentteja, 0 jopa argc. Ja nyt linjassa 21-- olen lainanotto temppu viime week-- Olen tarkkailun mitä on pituus argv kiinnike i. Olen säilytykseen että vastaus n. Ja sitten olen yhdistämään järjestelmässään J enintään n, missä j alustetaan arvoon 0. Niin, yleissopimus laskemista varten. Kun olet käyttänyt i, jos sinulla on sisäkkäisiä silmukka, et voi käyttää uudelleen i, muuten saat hakata, mahdollisesti, arvo ulkopuolella sisemmän silmukan. Joten Käytän j sopimuksin. Voisimme käyttää k. Jos sinulla on enemmän kuin k, luultavasti on liian paljon pesiviä, tyypillisesti. Mutta nyt huomaa minun printf linja on hieman erilainen. En tulostus% s, olen tulostus% c, joka tietenkin, on paikkamerkki merkkiä. 

Ja nyt huomaa tämän syntaksin. Uusi. Emme ole nähneet sitä ennen. Mutta loogisesti, tämä tarkoittaa vain sitä, saada nteen merkkijono argv ja saada j mitä? Yleisö: Luonne. DAVID MALAN: Luonne että merkkijono. Joten hakasulkuja jonka jälkeen hakasulkeissa tämä on sukellus ensimmäinen osaksi argv n jouset, ja sitten toinen hakasuluilla kanssa j on sukeltaa merkkiä että erityisesti merkkijono argv. Ja sitten vain hyvä toimenpide, Olen tulostus uuden linjan täällä. Joten nyt anna minun mennä eteenpäin ja avata jopa hieman isompi ikkuna jotta voimme nähdä tämän toiminnassa. Anna minun mennä tuohon kansioon. Ja nyt eivät tee argv-2-- whoops-- tehdä argv-2, ./argv 2. Enter. Ja se on vähän vaikea lukea pystysuunnassa, mutta se on todellakin nimi ohjelma, jota seuraa tyhjä rivi. Nyt haluaisin mennä eteenpäin ja tehdä foo. Samoin vaikea lukea, mutta se on todellakin tulostat yhden merkin riville. Ja jos en baari, se on nyt niiden tulostaminen rivi riviltä. Joten nouto tässä ei niinkään että, vau, katsokaa tätä siisti uusi temppu jossa voit saada klo sisältö array erityiset merkkiä, vaan pikemminkin siitä, miten viemme näitä perus ajatuksia, kuten indeksointi taulukkoon, ja sitten indeksoimisen ryhmän, joka oli siinä array, ja vain soveltamalla samoja ideoita hieman kehittyneempi esimerkkejä. Mutta perusasiat todellakaan ole muuttunut, vaikka viime viikolla. 

Nyt tämä on tavallaan ajankohtainen, siitä, että muistaa, viikolla nolla leikittiin puhelinluettelo näin. Ja vaikka tämä ei tietenkään fyysinen paperinpaloja, voit sellaista ajatella puhelinluettelossa array. Varmasti, jos olit reimplement Tämän kappaletta näitä paperilappuja tietokoneessa, luultavasti käyttäisit jotain kuten array tallentaa kaikki nämä nimiä ja numeroita aina Z. Joten tämä on mukavaa, koska se antaa meille mahdollisuuden, ehkä pohtia, kuinka voisit todella toteuttaa jotain sellaista. Kuten sarja ovien täällä. Jos siis could-- tarvitsemme yhden vapaaehtoisesti tulla ylös. Katsotaanpa. Tunne kasvot ehkä, tuntemattomia kasvoja ehkä. Entä oranssi? Täällä. Oranssi paita, tule ylös. 

Mennään eteenpäin nyt ja liikkua nämä ovet yli puolella, siirtää nämä pois tieltä hetkeksi. Mikä sinun nimesi on? 

Ajay: 

DAVID MALAN: Ajay. David. Hauska tavata. Kunnossa. Joten meillä on takana kuusi ovet digitaalisesti screen-- tai pikemminkin seitsemän ovet screen-- koko joukko numeroita. Ja olen kertonut sinulle mitään vuonna advance-- sovittu? Ajay: Mikään etukäteen. DAVID MALAN: Haluan sinun tekevän Nyt on löytää minulle ja meille, todella, numero 50, yksi askel kerrallaan. 

Ajay: Numero 50? 

DAVID MALAN: numero 50. Ja voit paljastaa mitä takana jokainen näistä ovien yksinkertaisesti koskettamalla sitä sormella. Hitto. [Naurua] 

[APPLAUSE] 

Hyvin tehty. OK. Meillä on ihana lahja palkinto sinua täällä. Kourallinen elokuvia me keskusteltiin viime viikolla. 

Ajay: Voi hitto. Voi, en ole koskaan nähnyt Spaceballs. 

DAVID MALAN: Spaceballs. Kunnossa. Joten pidä vain yksi hetki. How-- Tehdään tästä oppivainen moment-- miten te sitten löytää numero 50? Ajay: Valitsin satunnaisesti. DAVID MALAN: Eli valitsit satunnaisesti ja onnisti. Ajay: Kyllä. DAVID MALAN: OK. Erinomainen. Joten nyt, jos et olisi saanut onnekas, mitä muuta olisi voinut tapahtua takana nämä ovet? Joten jos menen eteenpäin ja paljastaa numerot tähän, ne todellisuudessa ovat satunnaisessa järjestyksessä. Ja parasta mitä voi olla tehty, rehellisesti, tapahtuu lopulta pahimmassa tapauksessa, tarkistaa ne kaikki. Sait erittäin onnekas, joka Sitä emme kutsuisi algoritmia. Kyllä, onnittelut. Mutta nyt let's-- huumori minulle, jos voisit. Mennään tähän välilehden täällä. Ja tässä ovat numerot selvästi mikä näyttää olevan satunnaisessa järjestyksessä, ja he olivat. Mutta jos nyt sen sijaan vaatimus että takana nämä ovet ovat lukuja, jotka on lajiteltu. Tavoitteena on nyt myös löydät meidät numero 50. Mutta ei se algorithmically, ja Kerro meille, miten aiot asialle. Ja jos löydät sen, sinulla pitää elokuvaa. Et löydä sitä, voit antaa sen takaisin. Ajay: Joten aion tarkistaa päät ensin, onko there's-- [Naurua ja suosionosoituksia] DAVID MALAN: Ole hyvä. Katsotaanpa katsomaan yksi ja Ajay edeltäjistä, Sean, joka ei ollut aivan yhtä onnekas. OK, joten teidän tehtävänne täällä, Sean, on seuraava. Olen piilossa nämä ovet numero seitsemän, mutta makaavat jossain näistä ovet sekä muita ei-negatiivisia lukuja. Ja sinun tehtäväsi on ajatella tätä ylärivin numeroita vain array. Olemme vain jono kappaletta Paperin numeroilla takana. Ja tavoitteena on, vain käyttämällä alkuun array täällä, etsi minulle numero seitsemän. Ja me sitten menossa kritiikkiä miten edetä tee sitä. Etsi meidät numero seitsemän, kiitos. Ei 5, 19, 13. Se ei ole temppu kysymys. 1. Tässä vaiheessa pisteet ei ole kovin hyvä, joten voit yhtä hyvin pitää käynnissä. 3. Mennä. Rehellisesti, en voi olla ihmettelemättä mitä olet edes ajatellut. 

SEAN: En voi kestää vain ylärivissä. DAVID MALAN: Vain ylärivissä. Joten sinulla kolme vasemmalle. Joten löytää minut 7. 

[Yleisö huutaa EHDOTUKSET] Joten nämä molemmat olivat uskomattomia hyvin erilaisista syistä. Joten tämä on, jos me jäi hetki sitten, ja Avainoivallus täällä on nämä ovet olivat numerot niiden takana että lajiteltiin, ihanteellinen takeaway jolle on, että voisitte tehdä pohjimmiltaan paremmin Tämän toisen example-- ja todellakin, että oli Seanin Ensimmäinen yritys satunnaisluvuilla yhtä before-- mutta heti koska nämä luvut lajitellaan, aivan kuten puhelinluettelossa, mitä voit tietysti tehdä? Tai miten voit hyödyntää tätä tietoa? Joo. 

Yleisö: Menet puolitiehen [kuultavissa]. DAVID MALAN: Joo. Täsmälleen. Joten Ajay saaman ensivaikutelman oli tarkistaa päät, muistaakseni, ja sitten me tavallaan päättynyt Esimerkiksi nopeasti. Mutta jos alkaisimme tehdä tätä enemmän suunnitelmallisesti tämänsuuntaista, mutta alkaa ehkä keskellä, koska he lajitellaan, kun me paljastaa numero 16, siksi know-- ja tehkäämme juuri that-- me Siksi tiedämme, että 50, nykypäivän tapauksessa on saanut olla oikealle. Joten aivan kuten viikko nolla, kun me repäisi puhelinluettelon kahtia ja heitti puolet ongelma pois, sama ajatus täällä. Voimme heittää tämä puoli ongelman pois. Ja luultavasti mitä voisi tehdä algorithmically, Kun tiedät, että 50 on oltava oikealle, jos se on kaikkialla, on kokeilla siellä, keskellä jäljellä ovet. Tietenkin, 50 on suurempi kuin 42, joten voimme heittää tämän jäljellä neljännes ongelman pois, ja lopuksi, tunnistaa jotain 50. Mutta aivan kuten puhelinluettelo, nämä numerot annettiin meille jo lajitellut järjestys, joka jättää meidät kysymystä, miten te saada asiat lajitelluiksi järjestyksessä? Ja rehellisesti sanottuna, millä hinnalla? On eri asia olla ojensi puhelinluettelo ja sitten yllättää ystäväsi löytämällä puhelinnumeron todella nopeasti, eikö? Revittiin 32 sivua etsimään henkilö pois 4 miljardia sivua, sanoimme oli äärimmäinen esimerkki. Mutta kuinka kauan se kestää Verizon lajitella että puhelinluetteloon? Kuinka kauan se kestää meitä lajitella nämä seitsemän numeroa? Se on kysymys, että olemme toistaiseksi täysin huomiotta. 

Joten vastata tähän kysymykseen nyt. Ja me kaikki olemme ulkona elokuvia nyt mutta meillä on joitakin stressi pallot. Jos vaikkapa kahdeksan vapaaehtoisia panisi pahakseni tuloaan täällä? Mennään eteenpäin ja tehdä, entä neljä teistä, te kolme täällä? Saada uusia kasvoja. Ja neljä teistä siellä? Ja now-- älkäämme bias here-- ja numero kahdeksan tänne päähän. Tule ylös. Kunnossa. Joten mitä meillä on täällä jokainen teistä on numero. Jos haluat mennä eteenpäin, ota tämä numero. Mikä sinun nimesi on? 

Artie: Artie. 

DAVID MALAN: Artie, okei. Olet numero 1. 

AMIN: Amin. DAVID MALAN: Amin. David. Olet numero 2. Ja mennä eteenpäin, niin annan te paperiarkkeja, riviin itsenne edessä musiikki seisoo samassa järjestyksessä kuin sinne. 

Andy: Hei, Andy. 

DAVID MALAN: Andy, on mukava nähdä sinua. Numero 3. 

Jaakobin Jacob. 

DAVID MALAN: Jacob, numero 4. Tervetuloa. GRANT: Grant. DAVID MALAN: Grant. Numero 5. 

Alanna: Alanna. 

DAVID MALAN: Alanna, numero 6. 

FRANCES: Frances. DAVID MALAN: Frances, numero 7. Ja? 

Raakelin Rachel. 

DAVID MALAN: Rachel, numero 8. Kunnossa. Mennä eteenpäin ja saada itsesi tässä järjestyksessä. Esitän yhden jäljellä musiikki seistä paikallaan. Missä tarvitset jalustan? OK. Mennä eteenpäin ja vain laittaa numeroita jossa yleisö voi nähdä niitä, nuottiteline ulospäin. Ja toivottavasti ensimmäinen järki tarkistaa here-- 4, 2, 6. Oh-oh. Hetkinen. Meillä ei ole 8. Minun täytyy häätää sinua Esimerkiksi jotenkin. Ei Ei, se on OK. Katsotaanpa. Voimme tehdä tämän. Valmiustila. Siellä mennään. Oikein. Kunnossa. Joten, nyt meillä on 8, 1, 3 7, 5. OK. Erinomainen. 

Joten kysymys käsillä on kello mitä kustannuksia, ja millaisin menetelmä, voimme itse lajitella numerot tähän jotta voimme sellaista työtä taaksepäin, lopulta, ja decide-- on se todella vaikuttava, se on todella tehokas, että voin jakaa ja valloittaa puhelinluettelo? Onko se todella tehokas, että Voin jakaa ja valloittaa nämä digitaaliset kappaleet paperin taululle, jos ehkä se tulee maksamaan meille onnen aikaa tai energiaa tai suorittimen käytön itse saada tietomme johonkin lajitellut järjestyksessä? Joten kysyä sama kysymys. 

Joten ensimmäinen pois, nämä luvut ovat melko paljon satunnaisessa järjestyksessä, ja aion ehdottaa yksi algoritmi, tai prosessi jonka avulla voimme järjestää nämä ihmiset. Aion lähestyä tämän melko naiivisti. Ja aion tunnustaa että se on aika paljon minulle kääri mieleeni ympäri koko aineistossa asettaa kerralla. Mutta tiedätkö mitä? Aion tehdä joitakin hyvin yksinkertainen marginaalinen korjauksia. 4 ja 2 ovat epäkunnossa, jos Tavoitteena on siirtyä 1 jopa 8. Niin tiedät mitä? Aion saada sinut kaverit vaihtaa, jos vaihdat fyysisesti kantoja ja teidän paperilappuja. Nyt 4 ja 6, nämä ovat kunnossa. Aion jättää ne olla. 6 ja 8, ne ovat kunnossa. Aio jättää niitä olla. 8 ja1, epäkunnossa. Jos kaksi panisi pahakseni vaihtamalla. Nyt 8 ja 3, jos te voisi vaihtaa. 8 ja 7, jos te voisi vaihtaa. Ja 8 ja 5, jos te voisi vaihtaa. 

Nyt olen tehnyt? Ei, ei tietenkään. Mutta olen tehnyt tilanne parempi, eikö? Mikä olikaan nimesi, numero 8? 

Raakelin Rachel. DAVID MALAN: So Rachel on tehokkaasti kuplina jopa melko pitkälle, aina loppuun Oma joukko numeroita täällä. Ja niin, että ongelma on tavallaan ratkaistu. Nyt selvästi, 2 vielä liikkuvat vähän, ja 4 ja 6 ja 1. Mutta olen ilmeisesti saanut hieman lähempänä ratkaisua. Joten soveltaa tätä samaa naiivi heuristinen uudelleen. 2 ja 4, OK. 4 ja 6, OK. 6 ja 1, mm, mm. Katsotaanpa swap. 6 ja 3, mm-mm. Katsotaanpa swap. 6 ja 7 on OK. 7 ja 5, Ehei. Katsotaanpa swap. Ja nyt 7 ja 8. Ja mikä nimesi olikaan? FRANCES: Frances. DAVID MALAN: Frances. Joten nyt Frances on vieläkin parempi asennossa, koska nyt 7 ja 8 oikein kuplina ylös. Niin 2 ja 4, OK. 4 ja 1, nyt swap. 4 ja 3, nyt swap. 4 ja 6, olet kunnossa. 6 ja 5, nyt swap. Ja nyt nämä kaverit ovat hyviä. Olemme melkein perillä. 2 ja 1, epäkunnossa, niin vaihda. Ja nyt haluan tehdä järki tarkistaa. 2 ja 3, 3 ja 4, 4 ja 5, 5 ja 6, 6 ja 7, 8. OK, joten olemme valmiit. 

Mutta millä hinnalla tein lajitella numerot tähän? No, kuinka monta askelta tein mahdollisesti ottaa, kun lajittelu nämä ihmiset? No, me palaamme tähän kysymykseen. Mutta rehellisesti sanottuna, jos sinulla vähän tylsää, että on sellaista paljastaa, että tämä ei ollut ehkä tehokkain algoritmi. Ja todellakin, suoraan sanottuna, olen hikoilu sitäkin kävely edestakaisin. Se ei tuntunut erityisen tehokasta. Joten kokeilla jotain muuta. Jos te voisi palauttaa itsenne nämä kahdeksan arvoja. Hyvää työtä. 

Katsotaanpa katsomaan digitaalisesti, vain hetki ennen kuin yrittää jotain muuta, mitä juuri tapahtui. Jopa täällä, olet tulleet visualisointi näistä kahdeksasta ihmisillä jolloin sininen ja punainen pylväät edustavat numeroita. Pitempi palkki, isompi numero. Lyhyempi palkki, pienempi numero. Ja mitä aiot nähdä on satunnaisessa järjestyksessä enemmän kuin kahdeksan. Tulette näkemään näitä baareja saada järjestetty, että sama algoritmi, tai joukko ohjeita, jotka soitamme vastedes kupla lajitella. Niin huomaa, joka toinen tai niin, kaksi palkkia syttyy punaisena, verrattiin keskenään tietokoneen. Ja sitten jos iso baari ja pieni baari ovat epäkunnossa, niitä vaihtoivat minulle. 

Nyt tämä on uskomattoman tylsiä katsella tätä, varmasti, kovin pitkään, mutta huomaa takeaway-- iso palkit liikkuvat oikealle, pikku baareja liikkuu vasemmalle. Katsotaanpa keskeyttää tämän prosessin ja nopeuttaa sitä olla paljon nopeampi, joten voimme saada korkean tason tunnetta mitä, todellakin, kupla lajitella tekee. Itse asiassa, se kuplii saakka Oikealla puolella luettelon, tai matriisi, isompi baareja. Ja kääntäen, pikku baarit ovat kuplivaa tiensä alas vasemmalle, joskin nopeammin kuin me aiemmin teki. Niin, vaikeampi nähdä ihmisten kanssa, mutta visuaalisesti se on todellakin mitä oli tapahtumassa. 

Mutta yritetään perusteellisesti erilaista lähestymistapaa nyt. Kokeillaan eri algoritmi, jonka olemme sinulle kaverit alkaa nämä alkuperäiset kantoja, mikä oli tässä järjestyksessä täällä. Ja mennään eteenpäin nyt. Ja aion tehdä jotain jopa helpompaa, eikö? Jälkeenpäin vaihtamalla pairwise jälleen ja taas, melkein hieman ovela. Tehdään asiat vieläkin sinisilmäisesti, missä jos haluan lajitella nämä ihmiset, haluan vain pitää näköinen pienimpien elementti. Joten nyt, 4 Vähiten olen nähnyt. Aion muistaa. Ei, 2 on parempi, ja muistaa, että. 1 on vieläkin pienempi. 3, 7, 5. OK. One-- mikä nimesi olikaan? 

Artie: Artie. 

DAVID MALAN: Artie. Niin, Artie, mennä eteenpäin. Aion vetää sinut ulos linja. Jos voisit tulla takaisin tänne. Ja minun täytyy tehdä tilaa hänelle. Meillä ratkaisupiste täällä. Kuinka me saatamme tehdä tilaa Artie täällä alussa, jossa numero 1 kuuluu? 

Yleisö: Shift. 

DAVID MALAN: OK, me voisi siirtää kaikille. Mutta ehdottaa optimointi. Se tuntuu hieman harmittaa minun esittävän neljä ihmistä siirtää kokonaan alas. Mitä muuta voisin tehdä? 

Yleisö: Vaihda ne. 

DAVID MALAN: Vaihda ne. Ja mikä nimesi olikaan? 

Jaakobin Jacob. DAVID MALAN: Jacob, liikkua. Paljon tehokkaampaa vain on Jacob swap paikoissa Artie, toisin kuin pakottaa kaikki neljä nämä ihmiset, kiitos paljon, että niiden oikea asento. Mikä on mukavaa noin Artie nyt hän on hänen oikeassa asennossa. Tehdään tämä uudestaan. 2, joka on pienin määrä olen nähnyt. 3, 7, 5. OK. 2 on ehdottomasti pienin. Ei tarvitse tehdä mitään työtä. Tehdään se uudestaan. 6. Pienin? 8. Ehei. 4? Ooh. Minäpä muistan 4. 3. Minäpä muistan 3. 7, 5. Vähiten olen nähnyt tämän eteen on 3. Jos haluat tulla ulos. Mihin olemme menossa laittaa sinut? Ja mikä on nimesi? 

Alanna: Alanna. 

DAVID MALAN: Alanna, olemme täytyy häätää teidät. Mutta joka on tehokkaampi, vain vaihtaa kaksi ihmistä, kuin olla useita ihmisiä todella kiertää yli. Nyt tämä uudelleen. Aion valita 4, joten tule ulos. Ja kuka liikkua? Numero 8, tietenkin. Jos minä nyt löytää numero 5, tule ulos. Numero 8 nappaa häätää jälleen. Minä lähden nyt löytää numero 6 paikallaan. 7 paikallaan. 8 paikallaan. 

Mitä me vain teimme nyt jotain kutsutaan valinta lajitella, ja jos me visualisoida, se on menossa tuntea hieman erilainen. Mennään eteenpäin ja tästä menu täällä, tämä visualization-- katsotaanpa muuttaa to-- tule, Firefox. Katsotaanpa vaihtaa tämän valinnan lajitella. Ja katsotaanpa nopeuttaa sitä kuin ennen, ja aloittaa visualisointi nyt. Ja tämä algoritmi on eri fiilis. On jokaisen iteraation, rehellisesti, se on vieläkin yksinkertaisempaa. Olen vain valitsemalla pienimmän alkion. Nyt rehellisesti, sain hieman onnekas, että aikaa, koska se lajitellaan supernopea. Elementit olivat satunnaisia. Se ei ole, kuten tulemme lopulta katso, pohjimmiltaan nopeammin. Mutta katsotaanpa kolmas ja viimeinen lähestyä täällä, mitä on tekeillä. Joten mene eteenpäin ja nollata te viimeisen kerran olla tässä järjestyksessä täällä. 

Ja nyt aion olla hieman viisaampi, vain pyöristää meidän algoritmeja. Aion tehdä tämän. Aion mennä edestakaisin niin paljon. Suoraan sanottuna olen kyllästynyt Kaiken tämän läpikäymiseen. Olen juuri menossa tekemään mitä olen annetaan listan alkuun, ja aion lajitella että silloin ja siellä. Joten tässä ollaan. Numero 4. Aion lisätä numeron 4 osaksi lajiteltu luettelo. Tehty. Väitän nyt, ja vain tehdä tätä enemmän selkeä, tämä osa minun luettelo on järjestetty. Se on tavallaan typerä väite, mutta todellakin 4 lajitellaan listan kokoa yhdellä. Nyt aion ottaa numero 2. Numero 2 Minä lähden nyt aseta oikeaan paikkaan. Joten miten 2 kuuluu? On selvää, tänne. Joten mene eteenpäin ja muuttaa takaisin, jos voisit. Ja miksi et kaverit vain ottaa musiikki seisoo sinua tällä kertaa. Ja lähdetään väkisin työnnä sinua osaksi listan alkuun. Joten hieman enemmän työtä. Minulla oli siirtyä Jacob ympärillä, ja mikä on nimesi? 

AMIN: Amin. 

DAVID MALAN: Amin. Mutta ainakin en mene edestakaisin. Olen vain ottaen asioita kuin menen. Olen vain lisäämällä ne oikeassa paikassa. 6, tämä on oikeastaan ​​aika helppoa. Katsotaanpa lisätä sinut tuonne, jos Halusin siirtyä hieman. Numero 8, myös melko helppoa. Tuolla. Hitto. Numero 1 emme voi vain Vaihdetaan Amin täällä, Koska se menee sotkea järjestys. Joten meidän on oltava hieman viisaampi. Niin, Artie, jos voisit varmuuskopioida hetkeksi. Mennään eteenpäin ja siirtää nyt Toisin kuin edellisessä algoritmeja, tehdä tilaa Artie täällä alussa. Joten lopussa päivä, olen sellainen tekee mitä halusin välttää ennen. Ja niin minun algoritmi on tavallaan on päinvastainen, älyllisesti, siitä, mitä se alun perin oli. Teen vain siirtymistä eri kohdista. Nyt olen 3. Voi hitto. Meidän on tehtävä enemmän työtä uudelleen. Joten työntää sinut ulos. Siirrytään 8, 6, 4-- oh oh-- ja 3 ei mene oikeassa. Niin ainakin hiukan säästöjä tällä kertaa. 7, ei liikaa tehtävää. Joten jos haluat pop takaisin, katsotaanpa aseta sinua. Ja lopuksi, 5, jos haluavat pop takaisin, me täytyy siirtää sinut,, te, kunnes viisi on paikallaan. 

Joten nyt nähdä tämä on korkealla tasolla graafisesti, Tehdään tämä algoritmi visualisointi yksi lisäaikaa. Joten tämä nimitämme lisäyslajittelun. Me ajaa sitä yhtä nopeasti, ja aloittaa sen täällä. Ja sekin on eri mieltä. Se on tavallaan paranee ja parempi, mutta se ei ole koskaan täydellinen kunnes menen ja sileä näitä aukkoja. Koska, jälleen, olen vain ottaa mitä Olen annetaan vasemmalta oikealle. Joten en saanut niin onnekas että kaikki oli täydellistä. Siksi meillä oli näitä pikku mispositions, että kiinteän ajan. 

Joten kaikki nämä algoritmit näyttävät ajaa hieman eri tahtiin. Itse asiassa, mikä sanot paras tai nopein tähän mennessä? Bubble sort, ensimmäinen? Valinta lajitella, toinen? Lisäyslajittelun, kolmas? Kuulen joidenkin valinta lajittelee. Muita ajatuksia? 

Joten näyttää siltä, ​​että kaikki nämä algoritmit ovat pohjimmiltaan aivan yhtä tehokas kuin kukin other-- tai päinvastoin, kuten tehoton kuin toisiaan, koska voimme tehdä perusteellisesti parempi kuin kaikki kolme näiden algoritmien. Ja se on hieman valkoinen valhe, too. kun sanon niin tehokas tai tehoton, joka on ainakin super-suuret arvot n. Kun meillä on vain kahdeksan ihmistä täällä, tai ehkä 50 tai niin baareissa ruudulla, sinun ehdottomasti huomaat eroja Näistä kolme algoritmeja. Mutta kuten n, ihmisten määrä, tai useita numeroita, tai joukko ihmisiä puhelimeen kirja, tai useita web-sivuja Googlen tietokannasta saa isompia ja isompia, näemme, että kaikki nämä kolme algoritmit ovat oikeastaan ​​aika huono. Ja voimme tehdä perusteellisesti parempaa. 

Katsotaanpa katsomaan lopuksi, mitä nämä algoritmit pitää kuulostavat yhteydessä muutama muu sekä tapa tämän visualisointi täällä että esittelee meille määrän algoritmeja. Mennään eteenpäin ja onnittelen osallistujista täällä, jotka kaikki järjestetty erittäin hyvin. Jos haluat ottaa jakaus lahja. Voit pitää numerot samoin. Ja mitä näet, tai pikemminkin kuulla, nyt on, että laitamme äänet kullekin näistä baareja ja liittää sen ohjelmisto, eri äänen taajuutta, voit ympäröidä mieltäsi enemmän audioly ympärille, mitä kukin näistä asioista näyttää. Joista ensimmäinen on lisäyslajittelun 

[TONES] 

Tämä on kupla lajitella. 

[TONES] 

Valinta lajitella. 

[TONES] 

Jotain kutsutaan yhdistämisen tavallaan. 

[TONES] 

Gnome lajitella. 

[TONES] 

Se on siinä CS50. Nähdään keskiviikkona. 

Kertoja: Ja nyt, "Deep Ajatuksia ", jonka Daven Farnham. Miksi se silmukka? Miksi ei tehdä paremmin? Saisin viisi silmukka. 

[Naurua]