DAVID Malan: Nu labi. Tāpēc tas ir CS50, un tas ir Tagad sākums nedēļas trīs. Tātad līdz šim, mēs esam bijis rakstot programmas C kas izskatās mazliet kaut kas līdzīgs šim šeit. Tātad mēs esam ieguvuši pāris asu ietver augšpusē. Mēs esam ieguvuši int, galvenais, par spēkā neesošu, un tad kaut ko darīt pa vidu, daži mazliet koda iekšpusē šī funkcija. Bet galvenais ir tas, ka mēs esam teicis neesošu šeit. Tātad spēkā neesošu, visu šo laiku, precizē ka šī programma, ja skrien, var palaist tikai ar savu nosaukumu. Jūs nevarat rakstīt nekādus citus vārdus vai numuri pēc programmas nosaukums, ja rādīt to. Tā, piemēram, ja programmas bija apkopoti failu sauc sveiki, jūs varētu darīt ./hello, bet tas ir tā. Vienīgais veids, ka jūs varētu sniegt ieguldījumu šo programmu ir zvanot funkciju. Piemēram, kādu funkciju mēs esam bijuši, izmantojot līdz šim saņemt ieguldījumu no lietotāja? AUDITORIJA: Get virkni. DAVID Malan: Lai saņemtu virkni, vai get int, vai arī jūs esat redzējis citiem, pat tad, ja jūs neesat izmantojis tos vēl, piemēram get ilgi, kamēr un tamlīdzīgi. Bet pieņemsim, ka mēs tiešām vēlaties sākt rakstīšanas programmas, kas ir nedaudz vairāk universāls, un, atklāti sakot, nedaudz vairāk piemēram, komandas, kas jūs esat bijis panākt, cerams, mazliet pieraduši. Tāpat kā cd kosmosa Dropbox. Šis, protams, izmaiņas jūsu direktorija, pieņemot tu esi Džona Hārvardas mājās direktoriju, lai jūsu Dropbox mapē. Tikmēr komandu kā šis izveido jaunu direktoriju sauc pset2, kā jūs varētu būt jau ir, vai drīz par problēmu noteikti divi. Marka Sveiki, protams, ir komanda kas balstās programmu, ko sauc sveiki no failu sauc sveiki dot c. Un katrā no tiem gadījumi, tagad mēs esam bija sniegt argumentus par tā saukto komandrindas, mirgo ātri, lai make zina, ko būvēt, un tāpēc ka mkdir ko mapi zina, lai radītu, un tā, ka cd zina kur jūs vēlaties doties. Bet līdz šim, mēs turpinām sakot ka galvenais, jūsu noklusējuma funkcija, ir spēkā neesošu izteiksme iekšpusē šiem iekavās, kas nozīmē, ka tā nevar veikt nekādus argumentus. Tātad sākas šodien, ko mēs gatavojamies darīt ir, mēs ejam, lai sāktu atbalstīt lietas, piemēram, tas pat. Faktiski, šajā gadījumā, kas jums nav parasti manuāli veida, Padarīt ir to izdarīt mums, tur nav vienu, bet viens, divi, trīs papildu virknes pēc programma ir nosaukta šķindēt. Tātad, kā mēs to sasniegtu? Nu, kas sākas šodien, ja mēs vēlamies sniegt ieguldījumu, izmantojot tā saukto komandrindas, mēs ejam, lai sāktu pievienot šeit to, kas yellow-- aizstājot tukšumu ar int argc komatu string argv open kronšteins tuvu kronšteins. Tagad tas ir interesanti uz pāris iemeslu dēļ. Viens, tas notiek, lai mūs rakstīt programmas, kas ir nedaudz vairāk dinamiskāku. Bet vairāk pārliecinoši, tas notiek, lai atvērtu Tagad saruna par kādi bloki var patiešām var izmantot, par to, kas virkni tiešām ir zem motora pārsega, līdz nākamajai nedēļai, kad mēs sākam ar akvalangu pat vēl dziļāk par to, kā mašīna ir padarot visu šo sīkumi darbu. Bet tagad, pieņemsim izdarīt, varbūt, attēlu. Kad jūs uzrakstīt programmu ar galveno deklarēta Šādā veidā, tā, ka galvenais aizņem divus argumentus, int and-- kādi datu tips ir otrais arguments? AUDITORIJA: Array. DAVID Malan: Array. Tā izskatās no pirmā acu uzmetiena, piemēram, tas ir string, bet paziņojums kvadrātiekavas. Atceros pēdējo reizi mēs ieviesa jēdziens masīva. Un bloki izmantot kvadrātiekavas pāris kontekstiem. Jūs varētu izmantot laukumu kronšteini iedziļināties masīva un saņemt konkrētu elementu, piemēram, kronšteinu 0 vai kronšteins 1 vai kronšteins 2. Bet mēs redzējām, ja īsi, pagājušajā nedēļā, ka arī jūs izmantot šos kvadrātiekavas uz atzīt lielumu no masīva, ja jūs jau iepriekš zināt, cik daudz ints vai cik virknes, vai kāds jums patiešām vēlas. Tātad izrādās, tur ir trešā konteksts šeit ka nav vairāki iekšā no kvadrātiekavās. Kad norādāt, jo esmu šeit, nosaukums kaut ko līdzīgu ARGV, kas ir tikai iedomātā veids sakot arguments vektoru, kas ir vēl viens iedomātā veids sakot masīvu argumentiem, open kronšteins aizvērt kronšteins tikko nozīmē, ka jums nav obligāti iepriekš zināt, cik liela masīvs būs, bet jūs zināt, tas būs masīvs. Tātad, ja jūs nezināt numurs nav likt to tur, atvērtā stiprinājuma ciešu kronšteinu nozīmē, ka argv nav string, bet masīvs stīgas. Tātad sintaktiski, ja jums domāju, ka atpakaļ pagājušajā nedēļā, tas ir ļoti līdzīgs sakot kaut kā int vecumu atvērta kronšteinu, un tad kaut kas pēc tam. Tātad, ko tas izskatās? Pieņemsim faktiski izdarīt attēlu. Tātad, ja jūs palaist šo programmu ar Main kam divi argumenti definēts iekšā no šiem iekavās, tu būtībā ir vismaz divi gabalos atmiņas nodod jums zem motora pārsega. Viens, kā es ņemšu vērš kā šis taisnstūris, gatavojas saukt argc. Un tikpat ātri Atgādinājums, kāda ir datu tips argc? Tātad, tas ir int. Tātad numurs notiek iet argc-- pagriezienus , ka apzīmē argumentu skaits. Tajā pašā laikā, es esmu sastādīts ARGV kā masīvu. Un es īsti nezinu cik ilgi tas būs, tāpēc šodienas vajadzībām dot dot dot. Tas varētu saņemt dažu garuma. Bet es esmu attēlotie šeit vismaz četri taisnstūri. Tātad ARGV rieciens atmiņas šī veikali stīgu stīgu stīgu dot dot dot, un argc ir tikai viens gabals Atmiņas par veselam skaitlim. Tāpēc tagad, būsim nedaudz precīzāki. Ja, kad man ir virknes šajā masīvā, sauc argv, es vēlos saņemt pie viņiem individuāli, tāpat kā pagājušajā nedēļā, mēs gatavojamies izmantot apzīmējumu tāpat ARGV kronšteinu 0 nokļūt pirmā lieta masīvu. Argv kronšteins 1, lai iegūtu Otra lieta, un tā tālāk. Galvenais šeit ir, mēs joprojām esam 0 indexed-- mēs joprojām skaitot no 0. Tāpēc tagad pieņemsim faktiski nodot kaut šajā. Ja es būtu sastādīt programmu, ko sauc sveiki no failu sauc sveiki dot c, un tad es palaist šo programmu ar punktu slash sveiki, Kāda mana datora, mans klēpjdators, izskatās zem pārsega kad es palaist dot slīpsvītra sveiki un hit Enter? Nu, tas ir iespējams ko mēs varētu aprakstīt kā satura sava datora atmiņu, vai RAM-- Random Access Memory. Citiem vārdiem, dators, kaut jums maģiski, liek numuru 1 argc, AKA argcount, un tas liek burtiski virkni ./hello in ARGV grupā 0. Man nav ne jausmas, atklāti sakot, to, kas ir in ARGV kronšteinu 1 vai 2, vai 3, jo, ja lietotājs ir ne drukāti kaut turklāt ./hello, mēs gatavojamies pieņemt, ka šie visticamāk ir atkritumu vērtības, tā runāt. Šie gabalos atmiņas pastāv, bet tas nav atkarīgs no mums skatīties uz tiem, jo argcount ir tikai viens. Tagad, tikmēr, ja I uzrakstīt palaist citu programmu, CD, kas ir vairāk atbilstoši komandu, Jūsu mirgojošu prompt-- cd telpā Dropbox-- kad es palaist, ka, efektīvi, kad cd programma tiek palaista, argc, iekšpusē mana datora atmiņā, ir visvairāk briefest otrais numurs 2. Un tad argv kronšteins o ir cd, argv kronšteins 1 ir Dropbox, un tad, protams, komandu pabeidz, lai visi šīs atmiņas būtībā iet prom un tiek izmantots kaut kas cits. Un tas ir iemesls, kāpēc es saku tikai sekundes daļu. Tikmēr, ja mēs mkdir pset2, attēls izskatās gandrīz tāds pats, bet ar dažādām stīgām iekšpusē ARGV. Ja man šķindēt domuzīme sveiki sveiki dot c, pati ideja. Vairāk sīkumi ir jāaizpilda argv, un argc, protams, ir 4. Tātad citiem vārdiem sakot, pat ja šī masīva varētu dot dot dot, dažu mainīga garuma, tā sakot, Jūs vienmēr zināt, kur tā beigās ir, jo argc gatavojas jums pastāstīt kurā brīdī jums ir, lai apturētu meklē elementiem ARGV. Jūs varat tikai apskatīt četri kopumā šajā lietā. Tātad pieņemsim tagad to apskatīt, varbūt, vienkāršu programmu. Viens, kas vienkārši saka sveiki lai kāds, piemēram, Zamyla. Tāpēc es varu pieprasīt es esmu gatavojas uzrakstīt programmu tikai brīdi, caur kuru es varētu darīt ./hello telpa Zamyla, un tad es gribu mana programma izdrukāt kaut ko super-vienkāršs, piemēram, "Hello, Zamyla." Tagad pagātnē, mēs esam izmanto getstring. Tātad agrāk, pat tad, ja jūs esat jauns, lai plānošanas, izredzes ir jūs varētu sakult programma, kas izmanto getstring un pēc tam izmanto printf teikt hi Zamyla. Bet pieņemsim neizmantot getstring šo laiku. Ļaujiet man nevis iedziļināties Appliant un tie ietver standarta man O dot h. Ļaujiet man ir arī CS50 dot h. Tagad int galvenais, un tagad es esmu nav gatavojas darīt spēkā neesošu šodien. Tā vietā, es esmu gatavojas darīt int argc string argv open kronšteins tuvu kronšteins, nenorādot numuru. Un tagad šeit ir mans tā sauktais darīt. Ko es esmu gatavojas darīt tagad, ir, es esmu gatavojas darīt mazliet lēciens ticības, Es esmu gatavojas pieņemt, ka lietotāja gatavojas izmantot šo programmu pareizi, un es esmu tikai gatavojas do printf hello,% SN. Tātad nekas jauns tur. Bet es gribu, lai tagad varētu neatkarīgi vārds lietotājs pēc programmas nosaukuma. Tātad, ja man ./hello telpu Zamyla, es gribu kaut programmatiski piekļūt citēt likt pēdiņas beigās "Zamyla." tāpēc es var iet manā arguments vektoru, mans masīvs stīgas, un, ja komandu, atkal bija ./hello telpa Zamyla, cik lielā skaitā es gribu likt ARGV šeit? AUDITORIJA: 1. DAVID Malan: 1, jo kronšteins 0 Izrādās būs programmas nosaukums, kā mēs redzējām. Tātad kronšteins 1 ir pirmais vārds ka I, lietotājs, ir drukāti. Es iešu uz priekšu un saglabājiet to. Es iešu uz manu mapi kur es esmu ievietots šo failu. Es esmu gatavojas darīt, lai sveiki 3. Comp IO ir OK. ./hello Zamyla Enter. Ko es daru nepareizi? Man bija nozvejojuši pārsteigums pats tikai brīdi tur. Ko es daru nepareizi? AUDITORIJA: Vārds. DAVID Malan: fails ir faktiski aicināja hello3.c. Un es darīju, ka tikai konsekvence, jo mēs esam bija hello.c grāds pagātne tiešsaistes kodu. Tātad, pieņemsim noteikt šo ./hello kronšteins domuzīme 3 Zamyla. Enter. Un tagad mums ir sveiki, Zamyla. Tajā pašā laikā, es varu mainīt to būt Rob, vai tiešām jebkuru citu vārdu. Bet pieņemsim apsvērt stūra lietu. Kas jūs varētu gaidīt, kas notiks, ja Man nav rakstīt ikviens vārdu vispār? AUDITORIJA: Kļūda. DAVID Malan: kļūda kaut kāda, varbūt. Let 's redzēt. Enter. Null. Tātad printf ir faktiski ir mazliet aizsargā mums šeit, un burtiski drukāšanas atvērtos paren null, bet vēl sliktāk lietas var notikt. Un tikai, lai pierādītu kaut kas jums ir absolūti nevajadzētu darīt, pieņemsim iet šeit un sākt papētījis. Tiesības? Ja es zinu, ka aina atmiņa ir būtībā tas, argv kronšteins 1 ir Zamyla, ARGV kronšteins 0 ir ./hello, vai ./hello-3. Kas ir grupā 2? Tātad, es varu atbildēt, ka apšaubīt sevi, vai ne? Es varu tikai mainīt 1 līdz 2. Es tagad var recompile sveiki 3, ./hello3 Aplūkosim tuvāk un hit Enter. Whoops. Nē quote zīme. Interesanti. Tātad tas ir sava veida forši redzētu, ko vēl ir šeit. Tātad, kas vēl ir iekšā manu klēpjdators? Pieņemsim saglabāt to ar kronšteinu 3. Padarīt hello3, ./hello-3. Ziņkārīgs. Un tagad pieņemsim riktīgi bold-- 50. Tā ka ir patiešām niršana dziļi uz mana datora atmiņā. 50 indeksi in. Tātad, lai sveiki 3 ./hello-3. Ziņkārīgs. Nu labi, tagad es esmu tikai gatavojas saņemt neapdomāti. Iesim līdz 5000. Viss labi. Tāpēc ļaujiet man recompile. Padarīt hello3, ./hello-3. OK. Tagad daži no jums, tur varētu būt spuldze iet off. Cik daudzi no jums ir redzējuši šo ziņu pirms? OK. Tātad, kāpēc? Odds are-- un tur ir dažādi lietas, kas var izraisīt to, un skaidri tu esi labs company-- mums ir skaidri izraisa tas, ko sauc segmentēšana vaina. Un garš stāsts īss, šodien, es ir pieskāries segments atmiņas ka man nevajadzētu būt. Kur segments nozīmē tikai rieciens atmiņas, ka man nevajadzētu būt. Tagad dators garantē, ka, ja es palaist ./helloZamyla ka es varu pieskarties ARGV būt kronšteins 0 un argv kronšteins 1. Bet argc ir vērtība 2, tas nozīmē, ka es esmu tikai allowed-- tas ir sava veida goda system-- pieskarties kronšteins 0 un kronšteins 1. Ja es iet jebkurā tālāk, tur ir pilnīgi būs atmiņu tur. Mans RAM pastāv fiziski datorā. Bet kas zina, kas tur ir? Patiešām, es skrienu vairākus programmas vienā reizē. Es varētu būt seen-- ja es nebūtu darot uz Appliant bet par manu Mac vai PC-- es varētu būt redzējuši saturu e-pastu. Es varētu būt redzējis tūlītēju ziņa Esmu nesen nosūtīts. Jebkas, kas varētu būt svārstījies ap atmiņā varēja piekļūt, kā šis patvaļīgs kvadrātiekava notācija. Vai, vēl sliktāk, Jums varētu būt atrada vienu no maniem paroles ka es gribētu nesen ierakstījāt, ka Programma bija saglabāti atmiņā tā, autentificēt mani, un tad tikai veida atstāja to RAM kamēr es atmest šo programmu. Un tiešām, tas ir viens no briesmas un viens pilnvaras izmantojot valodu, piemēram, C. Jums ir neierobežota pieeja uz visu saturu no kādas programmas atmiņā, un kādi sliktie puiši var pat darīt šajos cases-- it īpaši, ja mēs nokļūt Web programmēšana uz beigām semestra, mēs pārskatīt šo topic-- ir kule apkārt, iespējams, kāds ir dators s atmiņu un atrast šādus ziņkārīgs lietas kā mēs tur redzējām. Vai pat vēl sliktāk, paroles, ka viņš vai viņa pēc tam var izmantot, lai darīt sliktas lietas. Tik skaidri es nebūtu izdarījis, jo dīvaini lietas sāk notikt. Patiešām, tas ir programma crashing. Tas būtu līdzvērtīgi Mac OS vai Windows programmas logs vienkārši pazūd. Radās neparedzēta kļūda. In komandrindas vidē mēs redzam kaut kas līdzīgs šim. Bet tas ir iemesls, kāpēc, ir es esmu vienkārši pieskaroties atmiņu, kas nepieder man. Tāpēc pieņemsim aizstāvēties pret šo a mazliet citādā veidā , apskatot šo programmu šeit. Tātad, atkal, skelets ka mēs redzējām earlier-- un es esmu uzsvēra šo laika int. Un visu šo laiku galvenais ir tiešām atgriezās vērtību. Lai gan lielākā daļa mūsu lekciju piemēri, mēs nekad reiz izmantotas atgriezties neko galvenais. Mēs vienkārši rakstīt printf tuvu cirtaini lencēm, un tas arī viss. Bet par brīvu, ko kompilators ir darījis, lai jūs, efektīvi, atgriežas 0 jums. Turns out-- un tas ir nedaudz counterintuitive-- ka 0 ir labs. Tas nenozīmē, ka nepatiesa per se. 0 ir labs, un jebkuru valsti, 0 vērtība, pasaule ir nolēmusi, var neizsaka kļūda. Tātad, ja jūs esat kādreiz messed kaut up datorā, vai programma ir tikko miris par jums un tu būsi kādu kļūdainu logu ekrānā, sakot kļūda negatīvs 49 vai kļūda 23-- daži šķietami patvaļīgi value-- ka ir tāpēc, ka programmētājs ir iekodēts vērtību, piemēram, negatīva 49 vai pozitīvs 23 pārstāvēt jebkuru numuru, uzdrošinos teikt, no 4 miljardus iespējamām lietām kas varētu noiet greizi programmā. Tātad, kā es varētu lietot priekšrocība ir tas pats? Nu, ļaujiet man atvērt programmu , ka es rakstīju iepriekš, un kule ap tiešsaistes sauc sveiki 4. Un tas ir gandrīz identiski, izņemot to, ka tā ieguva mazliet kļūdu pārbaudei. Šajā gadījumā, es esmu atkal deklarēta Galvenais kā, ņemot divus argumentus, bet šoreiz, on line 17, paziņojums Es esmu dara mazliet veselība pārbaudītu. Es esmu pārliecinoties, ka argc vienāds vienāds ar 2. Jo, ja tā ir, ka nozīmē, es varu droši pieskarties ne tikai kronšteinu 0, bet kronšteinu 1. Un es iet uz priekšu un izdrukāt, šajā gadījumā, Zamyla vai Rob vai kāds vārds es drukāti out. Un tagad tikai, lai iegūtu nedaudz vairāk pareizu, Es esmu gatavojas skaidri atgriezties 0 neizsaka viss ir labi. Nekas slikts noticis. Bet pēc vienošanās, es esmu gatavojas atgriešanās 1, vai atklāti sakot visus nenoteiktas 0 vērtība, ja kaut kas nogāja greizi. Tagad lietotājs nav gatavojas tiešām paziņojums, kas notiek. Patiešām, ja es iedziļināties šajā direktorijā, mēs tuvinātu un darīsim Sveiki 4, ./hello-4 Zamyla uzvedas kā es gaidīt. Bet, ja es tā vietā nerakstiet kaut kas, nekas, šķiet, varētu notikt, bet tas nav crash. Un, ja es tā vietā kaut ko darīt piemēram, Rob ir prokūrists in Thayer-- apmaiņu patvaļīga informācija. Bet paziņojums, argv 1, 2, 3, 4, un 5 tagad vajadzētu pastāvēt atmiņā. Tas arī nav ko mana programma sagaida, jo es esmu pārbaudījis, vai argc vienāds atbilst 2 vai ne. Tāpēc es esmu tagad aizstāvēt pret to. Tagad, kā malā, mēs programmer-- vai drīzāk mēs users-- nekad redzēt, ka 0 vai 1, bet izmantojot instruments, ko sauc Defektu novēršana vai citus instrumentus, kā mēs redzēsim pirms ilgi, jūs programmētājs faktiski var redzēt, kas varētu būt notiek nepareizi iekšpusē jūsu programmā. Tātad, kādi jautājumi par argc? Jā. AUDITORIJA: Es esmu redzējis, kur viņi nav bijis raksturs, [nedzirdama] tikko teica string zvaigzne d, piemēram, raksturs zvaigznīte komats. Vai tie ir līdzvērtīgi šeit? DAVID Malan: Viņi ir. Tātad jautājums ir, jums ir reizēm redzējis programmas , piemēram, tas, ka nav saka string ARGV kronšteinu bet gan kaut ko pateikt tāpat char zvaigzne ARGV grupā. Un tur ir vēl citi varianti, ka jūs varētu redzēt. Tie patiešām līdzvērtīgi. Tagad, mums ir šie veida mācību riteņiem gada formā virknes CS50 bibliotēka, bet tikai nedaudz vairāk par nedēļu vai tāpēc mēs ejam, lai novērstu, ka obstrukcija kopumā un faktiski apskatīt kādā char un zvaigzne ir, un to, kā tie attiecas uz atmiņu pārstāvību kopumā. Tātad mēs būsim atpakaļ uz to. Citi jautājumi par mūsu ARGV vai argc? Jā. AUDITORIJA: Kāpēc tas atgrieztos kļūda [nedzirdama]? DAVID Malan: Kāpēc to darīja atpakaļ kļūda only-- oh! Kā iepriekšējā gadījumā, kad mēs Tika futzing apkārt ar atmiņu, kāpēc tas tikai atpakaļ kļūda kad es tiešām drukāti lielu skaitu? Īsā atbilde ir, mēs vienkārši palaimējies. Vispārīgi runājot, datoru piešķir atmiņas gabalos, un tas deva man pietiekami lielas rieciens, ka Man prom, bez pamanīju, no aizkustinošs grupā 2, grupā 3, kronšteins 50, bet tiklīdz es stumtu mana laime, es devos tālāk robežas rieciens atmiņas operētājsistēma bija devis man. Un tas ir tad, kad to skavām un teica, nē. Segmentācija kļūda. Jā. AUDITORIJA: Kā dators zina vērtību argc? DAVID Malan: Kā dators zina vērtību argc? Palaižot programmu, šī programma, pēc rakstura mirgojošu uzvednē ir pasniedza masīvs vārdi, kas tika drukāti pie ātru, kas bija drukāti pie uzvednē. Un tā tas ir jūsu darba sistēma, kas būtībā aizpilda galvenie argumentus par jums. Tāpēc, ka ir viens no pakalpojumiem, ka jums, veida slepeni zem motora pārsega operētājsistēma. Citi jautājumi? Jā. AUDITORIJA: Ko core dump nozīmē? DAVID Malan: Ko core dump nozīmē? Tā ka ir labs jautājums. Un ļaujiet man iet atpakaļ šajā direktorijā šeit. Un jūs pamanīsiet, ka Man ir jaunu failu tur. Tas ir patiešām sauc kodols, un tas ir faktiski parasti pieklājīga izmēra faila. Tas ir būtībā momentuzņēmums saturs manas programmas atmiņā vai RAM, kad tā avarēja. Un tas būs noderīgs, potenciāli, diagnostiski, kad mēs runājam nākamajā lekcijā un apakšpunktu par debugging, tāpēc, ka jūs faktiski var darīt līdzvērtīgs digitālo autopsija uz šo failu, lai palīdzētu izdomāt ko jūs nepareizi jūsu programmā. Jā. AUDITORIJA: Vai argc a komandu pats, vai jūs varat nosaukt to kaut ko? DAVID Malan: Labs jautājums. Ir argc komandu pats par sevi, vai jūs varat nosaukt to kaut ko? Tas noteikti nav komanda. Tas ir vienkārši mainīgais s nosaukt vai arguments nosaukumu, un tā absolūti mēs varētu nosaukt šo foo, mēs varētu saukt šo joslu, kas mēdz būt go-to vārdiem, kas datoru zinātnieks iet. Bet pēc vienošanās, mēs izmantojam argc un ARGV. Bet tas ir tikai cilvēka konvencija, nekas vairāk. Viss labi. Tātad izrādās, es esmu bijis stāsta mazliet baltu lie-- un godīgi sakot, nākotnē, jūs redzēsiet mēs esam spēcīgi citus baltos melus. Bet tagad, mēs ejam lobīties atpakaļ vienu no tiem. Šajā gadījumā šeit, kad es agrāk skrēja programmu, piemēram ./hello vai ./hello-3 Zamyla, mums bija saturu my datora atmiņa meklē aptuveni līdzīgi šo. Bet atcerēties, ko virkne ir. Ko mēs sakām, pirms nedēļas, ko string patiesībā ir zem motora pārsega? AUDITORIJA: Array chars. DAVID Malan: Tas ir masīvs chars, vai ne? Lai mēs varētu būt masīva virknes, bet, savukārt, string ir masīvs rakstzīmes. Tātad, ja es tiešām gribu būt anālais, kad es izdarīt šo attēlu, Es patiesi būtu zīmējums tā nedaudz vairāk kā šis, , kurā katrs no šiem indeksi manas ARGV masīva, ir pati vesela virkne kas pats par sevi ir masīvā. Un tagad balta meli mēs esam spēcīgi šodien ir tā, ka aina nav izskatās gluži kā šis. Patiesībā, maz kvadrātu parasti ārpus lielajām taisnstūru tur. Bet mēs atgriezīsimies pie ka pirms ilgi. Bet tas ir ./hello slīpsvītru 0, , ka ir īpašs raksturs, kas norobežo galu virkni, un mēs esam ieguvuši vēl vienu pēc Zamyla vārds. Tātad, ko tas nozīmē? Nu, ļaujiet man iet uz priekšu un atvērt divus citus piemērus kas ir pieejami tiešsaistē. Viens sauc argv1.c un otrs ir argv2. Tas ir super-vienkārša programma, kas atšķiras no iepriekšējām programmām jo tagad es esmu, izmantojot argc un ARGV šeit. Un tagad es esmu integrējot ar cilpu atbilst 18, no i = 0 par līdz argc. Un tas, ko es esmu gatavojas darīt ar šo rindiņu kodu šeit? Angļu valodā. Tas, protams, liecina izmantošanu argc. Bet angļu valodā, ko dara tas jādara, ja man palaist šo programmu? Yeah? AUDITORIJA: Tas notiek, lai drukātu savu ekrāna tik daudz reižu, cik vēlaties. DAVID Malan: Tieši tā. Tātad, kāds vārdi I tipa pie uzvednē, tas ir gatavojas atvemt tos uz mani vienu katrā rindā. Tāpēc iesim uz priekšu un darīt to. Ļaujiet man iet manā direktorijā un darīsim argv1 ./argv1. Un tagad, pieņemsim glabā to vienkārši. Darīsim neko sākumā. Tas bija izdrukāt viena lieta, un tas patiešām programmas nosaukums, jo tas ir iekļauts grupā 0. Ja tagad es saku foo, tas gatavojas darīt tie divi, un, ja es saku foo bārs, tas teiksiet šīs trīs lietas. Tagad tas ir nedaudz interesanti, varbūt. Taču atgādinām, ka ARGV ir masīvs stīgas, bet string ir masīvs simboliem, lai mēs varētu pieņemt lietas uz augšu robs un piemērot ka pamata loģika un padarīt kodu, kas izskatās nedaudz vairāk mistisks, protams. Bet, ņemot ligzdotu cilpa, kaut kas līdzīgs tam, ko jūs varētu atgādināt no Mario, Piemēram, ja jūs to šādā veidā. Tātad tagad paziņojums on line 19, es esmu atkal atkārtojot pār maniem argumentiem, no 0 uz līdz argc. Un tagad rindā 21-- es esmu aizņēmumu triks no pagājušā week-- Es esmu pārbaudi, kas ir garums ARGV grupā i. Es esmu uzglabāt šo atbildi n. Un tad es esmu integrētu no j uz līdz n, kur j ir inicializēts ar 0. Tātad, konvencija skaitīšanai. Pēc tam, kad esat izmantojis i, ja jums ir Nested cilpas, jūs nevarat izmantot i atkal, citādi jūs clobber, iespējams, vērtība ārpus iekšējās cilpas. Tāpēc es esmu, izmantojot j pēc vienošanās. Mēs varētu izmantot k. Ja jums ir vairāk nekā k, jūs, iespējams, ir pārāk daudz ligzdošanu, parasti. Bet tagad, ievērosiet manu printf līnija ir nedaudz atšķirīgs. Es neesmu drukāšanas% s, es esmu drukāšanas% c, kas, protams, ir vietturis par char. Un tagad paziņojums šo sintaksi. Jauns. Mēs neesam redzējuši to pirms tam. Bet loģiski, tas tikai nozīmē, saņemt ITH virknes ARGV un saņemt j kāda? AUDITORIJA: Character. DAVID Malan: Character šajā virknē. Tātad, izmantojot kvadrātiekavas seko kvadrātiekavās, tas ir niršana pirmais uz ARGV s stīgām, un pēc tam otro kvadrātiekavas ar j ir iegremdēšanās rakstzīmes ka īpaši virknes ARGV. Un tad, tikai labu pasākumu, Es esmu drukāšanas jaunu līniju šeit. Tāpēc tagad ļaujiet man iet uz priekšu un atvērt pat nedaudz lielāku logu lai mēs varētu redzēt to darbībā. Ļaujiet man iet uz šo mapi. Un tagad darīsim argv-2-- whoops-- padarīt ARGV-2, ./argv 2. Enter. Un tas ir mazliet grūti lasīt vertikāli, bet tas ir tiešām nosaukums programma, kam seko tukšu līniju. Tagad ļaujiet man iet uz priekšu un darīt foo. Tāpat grūti lasīt, bet tas ir tiešām drukāšanas vienu rakstzīmi katrā rindā. Un, ja man bārs, tas ir tagad drukājot tiem rindu pa rindai. Tātad takeaway šeit ir ne tik daudz ka, wow, apskatīt šo veikls jaunajā triks kur var saņemt pie satura masīva īpašajām rakstzīmēm, bet gan to, kā mēs esam ņemot šos pamata idejas kā indeksācija uz masīva, un tad indeksāciju stājas masīvs, kas bija šajā masīvā, un tikai piemērojot vienādas idejas nedaudz sarežģītākus piemērus. Bet pamati tiešām nav mainījies, pat kopš pagājušajā nedēļā. Tagad tas ir sava veida savlaicīga, ar to, ka, atgādināt, nedēļā nulles mēs spēlējām ar telefona grāmatu, kā šis. Un, pat ja tas ir acīmredzami fiziskie papīra gabalus, Jūs varat veida iedomāties tālruņa grāmatu kā masīvu. Protams, ja Jums bija reimplement šo gabalu šie papīra gabalus datorā, iespējams, jūs varētu izmantot kaut ko piemēram, masīvs glabāt visiem tiem vārdus un numurus no A līdz galam caur Z. Tātad tas ir jauki, jo tā ļauj mums iespēju, varbūt, lai apsvērtu, kā jūs varētu faktiski īstenot kaut ko līdzīgu, ka. Tāpat kā ar virkni durvīm šeit. Tātad, ja es could-- mums ir nepieciešams viens brīvprātīgi, lai nāk uz augšu. Let 's redzēt. Svešs sejas, iespējams, svešs sejas varbūt. Kā par oranžā krāsā? Šeit. Orange krekls, nāc uz augšu. Iesim uz priekšu tagad un pārvietot šīs durvis vairāk nekā uz pusi, pārvietot tos no ceļu uz brīdi. Kāds ir tavs vārds? AJAY: DAVID Malan: Ajay. David. Prieks iepazīties. Viss labi. Tāpēc mums ir aiz šīm sešām durvis digitāli uz screen-- vai, drīzāk, septiņas durvis screen-- visu ķekars numuriem. Un es esmu teicis jums neko in advance-- piekrita? AJAY: Nekas iepriekš. DAVID Malan: Viss, ko es gribu, lai jūs darīt Tagad ir atrast par mani, un mums, tiešām, numurs 50, vienu soli laikā. AJAY: Number 50? DAVID Malan: numurs 50. Un jūs varat atklāt, kas ir aiz katra no šīm durvīm , vienkārši pieskaroties ar pirkstu. Damn to. [Smiekli] [Aplausi] Ļoti labi darīts. OK. Mums ir jauka dāvana balva par jums šeit. Jūsu pick filmas mēs pārrunāja pagājušajā nedēļā. AJAY: Ak, man. Ak, es nekad neesmu redzējis Spaceballs. DAVID Malan: Spaceballs. Viss labi. Tā turēt tikai uz vienu brīdi. How-- pieņemsim padara šo pārgudrību moment-- kā jūs iet par atrast skaitli 50? AJAY: Es izvēlējos nejauši. DAVID Malan: Tātad jūs izvēlējāties nejauši un palaimējies. AJAY: Jā. DAVID Malan: OK. Excellent. Tāpēc tagad, bija jums nav gotten laimīgs, kāds cits varētu būt noticis aiz šīm durvīm? Tātad, ja man iet uz priekšu un atklāt šos numurus šeit, tie patiesībā ir jauktā secībā. Un labākais jūs varētu būt darīts, atklāti sakot, ir par, galu galā, sliktākajā gadījumā, pārbaudot tos visus. Tātad, jums ir super-laimīgs, kas nav tas, ko mēs gribētu saucam algoritmu. Jā, Apsveicu. Bet tagad let's-- humors mani, ja jūs varētu. Iesim uz šo cilni šeit. Un šeit ir skaitļi skaidri ko, šķiet, izlases kārtībā, un tie bija. Bet tagad, ja es tā vietā prasījums ka aiz šīm durvīm ir skaitļi, kas tiek šķirotas. Mērķis tagad ir arī mūs atrast skaitli 50. Bet darīt to algoritmiski, un pastāstīt mums, kā jūs iet par to. Un, ja jūs atradīsiet to, jūs saglabāt filmu. Jums nav atrast, jūs dodat to atpakaļ. AJAY: Tāpēc es esmu gatavojas, lai pārbaudītu galiem pirmkārt, lai noteiktu, vai there's-- [Smiekli un aplausi] DAVID Malan: Šeit jums iet. Pieņemsim apskatīt vienu no Ajay priekšgājējiem, Sean, kurš nebija tik laimīgs. Labi, tāpēc jūsu uzdevums šeit, Sean, ir šāds. Man ir slēpta aiz šiem durvis numuru septiņi, bet tucked prom dažās no šīm durvīm kā arī ir citi ārpustirgus negatīvie skaitļi. Un jūsu mērķis ir domāt par to augšējā rindā skaitļu kā tikai masīva. Esam tikai secība gabalu papīra ar cipariem aiz viņiem. Un jūsu mērķis ir, izmantojot tikai top masīvs šeit, atrast man numuru septiņi. Un mēs tad dodas uz kritiku kā jūs iet par darot to. Mūs atrast numuru septiņi, lūdzu. Nē 5, 19, 13. Tas nav triks jautājums. 1. Šajā brīdī jūsu rezultāts nav ļoti labi, lai jūs varētu arī saglabāt turpinās. 3. Iet tālāk. Atklāti sakot, es nevaru palīdzēt, bet brīnums ko jūs pat domāt par. Sean: Es varu tikai no augšējā rindā. DAVID Malan: Tikai augšējā rindā. Tātad jūs esat ieguvuši trīs pa kreisi. Tāpēc atrast mani 7. [AUDITORIJA kliedz PIEDĀVĀJUMI] Tātad abi no tiem bija pārsteidzošs ļoti dažādu iemeslu dēļ. Tātad, tas ir, ja mēs pārtraukts pirms brīža, un galvenais ieskats šeit bija šīs durvis bija numuri aiz viņiem, kas bija sakārtoti, ideāla takeaway, par kuru ir, ka jūs varētu darīt būtiski labāk šis otrais example-- un, protams, ka bija Sean s Pirmais mēģinājums ar izlases numurus tikpat before-- bet tiklīdz , kā šie skaitļi ir sakārtoti, daudz, piemēram, tālruņu grāmatā, ko jūs varat, protams, darīt? Vai to, kā jūs varat sviras šīs zināšanas? Jā. AUDITORIJA: Tu ej pusceļā [nedzirdama]. DAVID Malan: Jā. Tieši tā. Tātad Ajay sākotnējais instinkts bija pārbaudīt galus, kā es atceros, un tad mēs veida gatavo piemērs ātri. Bet, ja mēs sākām to darīt vairāk metodiski pa šo līniju, bet sākot varbūt vidū, jo viņi sakārtoti, tiklīdz mēs atklāt numurs 16, tādēļ mēs know-- un pieņemsim darīt tieši that-- mēs Tāpēc zinu, ka 50, šodienas gadījumā, tagad ir labi. Tātad tāpat kā nedēļu nulles, kad mēs saplēsa tālruņa grāmatu pusē un izmeta pusi problēma prom, pati ideja šeit. Mēs varam mest šo pusi Problēmas prom. Un, iespējams, kāda jums varētu darīt algoritmiski, kad jūs zināt, ka 50 ir jābūt uz labo pusi, ja tas ir visur, ir mēģina tur, vidū no atlikušajām durvīm. Protams, 50 ir augstāks nekā 42, tāpēc mēs varam mest šo atlikušo ceturtdaļa problēmas prom, un, visbeidzot, noteikt kaut kas līdzīgs 50. Bet, tāpat kā ar tālruņa grāmatu, šie skaitļi tika dots mums jau šķiroto kārtība, kas atstāj mūs ar jautājumu, kā Jūs iegūt lietas Into sakārtoti secībā? Un, godīgi sakot, par kādu cenu? Tā ir viena lieta, lai būtu pasniedza tālruņa grāmatu un tad pārsteigt savus draugus, atrodot tālruņa numuru tiešām ātri, labi? Negants 32 lappuses, lai atrastu cilvēks no 4 miljardus lapām, mēs teicām bija viens ekstrēms piemērs. Bet cik daudz laika pagāja Verizon, lai sakārtotu šo telefona grāmatu? Cik daudz laika pagāja mums kārtot šos septiņus skaitļus? Tas ir jautājums, ko mēs esam līdz šim pilnīgi ignorēja. Tātad pieņemsim atbildēt uz šo jautājumu tagad. Un mēs visi esam no filmas tagad, bet mums ir dažas stresa bumbas. Ja, teiksim, astoņi brīvprātīgie nebūtu prātā pievienoties mums šeit? Iesim uz priekšu un darīt, kā par četri no jums, trīs no jums šeit? Get dažas jaunas sejas. Un četri no jums tur? Un now-- pieņemsim nav aizspriedumiem here-- un numurs astoņi nekā šeit uz beigām. Nāciet uz augšu. Viss labi. Tātad, ko mēs esam šeit, lai katrs no jums ir skaitlis. Ja vēlaties doties priekšu, izmantot šo numuru. Kāds ir tavs vārds? Artie: Artie. DAVID Malan: Artie, labi. Tu esi numurs 1. Amin: Amin. DAVID Malan: Amin. David. Tu esi numurs 2. Un iet uz priekšu, jo man rokas Jūs papīra lapas, rindā sevi up priekšā mūzikas stāv tādā pašā kārtībā, kā tur augšā. ANDY: Hi, Andy. DAVID Malan: Andy, tas ir jauki redzēt jūs. Numurs 3. JACOB: Jacob. DAVID Malan: Jēkabs, numurs 4. Laipni lūdzam uz klāja. GRANT: Grant. DAVID Malan: Grant. Numurs 5. Alanna: Alanna. DAVID Malan: Alanna, numuru 6. FRANCES: Frances. DAVID Malan: Frances, numurs 7. Un? RACHEL: Rachel. DAVID Malan: Rachel, numuru 8. Viss labi. Iet uz priekšu un iegūt sev šādā secībā. Ļaujiet man vienu atlikušo mūzika stāvēt vietā. Kur jums ir nepieciešams stāvēt? OK. Iet uz priekšu un vienkārši nodot savu numuru kur skatītāji var redzēt tos, mūzika stāvēt saskaras āru. Un, cerams, mūsu pirmais veselība pārbaudītu here-- 4, 2, 6. Oh-oh. Pagaidiet minūti. Mums nav par 8. Man vajag, lai izliktu jūs no piemērs kaut kā. Nē Nē, tas ir OK. Let 's redzēt. Mēs varam izdarīt. Stāvēt. Tur mēs ejam. Pareiza. Viss labi. Tātad, tagad mums ir 8, 1, 3 7, 5. OK. Excellent. Tātad jautājums ir par to, pēc kādu cenu, un izmantojot kādu metodi, mēs varam reāli sakārtot šos numurus šeit lai mēs varētu veida strādāt atpakaļ, galu galā, un decide-- tas tiešām iespaidīgs, tas ir tiešām efektīvs, ka es varu sadalīt un iekarot tālruņa grāmatu? Vai tas tiešām ir efektīvs, ka Es varu sadalīt un iekarot šie digitālie gabali papīra uz kuģa, ja varbūt tas maksās mums laimi laika vai enerģijas vai CPU cikliem lai faktiski saņemtu mūsu datiem uz kādu šķirotas kārtībā? Tāpēc pieņemsim uzdot šo jautājumu. Tātad, pirmkārt off, šie skaitļi ir diezgan daudz nejaušā secībā, un es esmu gatavojas ierosināt viens algoritms, vai process ar kuru mēs varam sakārtot šiem ļaudīm. Es esmu gatavojas vērsties tas diezgan naivi. Un es esmu gatavojas atzīt , ka tas ir sava veida daudz par mani wrap manu prātu ap visa datu kopa uzreiz. Bet jūs zināt, ko? Es esmu gatavojas veikt dažas Ļoti vienkārši marginālās labojumi. 4 un 2 iziet no ierindas, ja mērķis ir, lai iet no 1 gada līdz 8. Tātad, jūs zināt, ko? Es esmu nāksies tevi puiši swap, ja jūs pāriet fiziski pozīcijas un Jūsu gabalus papīra. Tagad 4 un 6, tie ir kārtībā. Es esmu gatavojas atstāt tos būt. 6 un 8, tie ir kārtībā. Gatavojas atstāt viņiem būt. 8 un1, no rīkojuma. Ja jūs divi neiebilstat pārnešana. Tagad 8 un 3, ja jūs puiši varētu apmainīt. 8 un 7, ja jūs puiši varētu apmainīt. Un 8 un 5, ja jūs puiši varētu apmainīt. Tagad, es esmu darījis? Nē, protams, nav. Bet man ir devuši situācija labāka, vai ne? Kāds bija jūsu vārds atkal numuru 8? RACHEL: Rachel. DAVID Malan: Tātad Rachel ir efektīvi burbuļo pat diezgan tālu, visu ceļu līdz beigām mans masīvs numuru šeit. Un tā, ka problēma ir sava veida atrisināta. Tagad skaidri, 2 joprojām ir pārvietot mazliet, un 4 un 6 un 1. Bet man šķiet, ir gotten nedaudz tuvāk šķīdumā. Tāpēc pieņemsim piemērot šo pašu naivs heiristisko vēlreiz. 2 un 4, OK. 4 un 6, OK. 6 un 1, mm-mm. Pieņemsim swap. 6 un 3, mm-mm. Pieņemsim swap. 6 un 7 ir OK. 7 un 5, nope. Pieņemsim swap. Un tagad 7 un 8. Un kāds ir tavs vārds atkal? FRANCES: Frances. DAVID Malan: Frances. Tāpēc tagad Frances ir vēl labāks pozīciju, jo tagad 7 un 8 ir pareizi burbuļojot augšu uz augšu. Tātad 2 un 4, OK. 4 un 1, pieņemsim swap. 4 un 3, pieņemsim swap. 4 un 6, tu esi OK. 6 un 5, pieņemsim swap. Un tagad šie puiši ir labi. Mēs esam gandrīz tur. 2 un 1, iziet no ierindas, tāpēc mijmaiņas. Un tagad ļaujiet man darīt veselība pārbaudītu. 2 un 3, 3 un 4, 4 un 5, 5 un 6, 6, 7, 8. Labi, tāpēc mēs esam darījuši. Bet par kādu cenu darīja I šķirot šos skaitļus šeit? Nu, cik soļus darīja I potenciāli veikt, ja šķirošanas šiem ļaudīm? Nu, mēs atgriezīsimies pie šī jautājuma. Bet, atklāti sakot, ja jums mazliet garlaicīgi, tas ir veida atklājot, ka tas nebija varbūt visefektīvākā algoritms. Un tiešām, godīgi sakot, es esmu svīšana viss vēl ejot uz priekšu un atpakaļ. Ka nejutās īpaši efektīva. Tātad, pieņemsim mēģināt kaut ko citu. Ja jūs puiši varētu nomainīt paši uz šīm astoņām vērtībām. Labs darbs. Pieņemsim to apskatīt digitāli, lai tikai Brīdis pirms mēs cenšamies kaut ko citu, par to, kas tikko notika. Šeit, jūs gatavojaties redzēt vizualizācija šiem astoņiem cilvēkiem kuru zilā un sarkanā krāsā bāri ir numuri. Garāki josla, Jo vairāk. Īsāks josla, mazāks skaits. Un ko jūs gatavojas redzēt ir izlases pasūtījums vairāk nekā astoņi no tiem. Jūs esat dodas, lai redzētu šos bāri kļūst sakārtoti ar šo pašu algoritmu, vai noteikt instrukcijas, kas mēs saucam turpmāk burbulis kārtošanas. Tātad paziņojums, katru otro vai tā, divi bāri tiek iedegas sarkanā krāsā, tiek salīdzinātas ar datoru. Un tad, ja liels bārs un maz bārs ir iziet no ierindas, tie tiek samainīti par mani. Tagad tas ir neticami garlaicīgs skatīties to, protams, ļoti ilgi, bet paziņojums takeaway-- liels bars pārvietojas pa labi, maz bāri, kas pārvietojas pa kreisi. Pieņemsim pārtraukt šo procesu un paātrināt šo augšu lai būtu daudz ātrāk, tāpēc mēs varam iegūt augsta līmeņa sajūtu, ko, tiešām, burbulis kārtot dara. Patiešām, tas ir burbuļo līdz labajā pusē no saraksta, vai masīvs, lielākie bāri. Un otrādi, maz bāri ir burbuļošana savu ceļu uz leju, pa kreisi, kaut ātrākā tempā nekā mēs agrāk darījām. Tātad, grūtāk redzēt ar cilvēkiem, bet vizuāli tas ir patiešām to, ko notiek. Bet pamēģināsim fundamentāli atšķirīga pieeja tagad. Pamēģināsim atšķirīgs algoritms, ar kuru mums ir jums puiši sāk šajās oriģināls pozīcijas, kas bija šis rīkojums šeit. Un iesim uz priekšu tagad. Un es esmu gatavojas darīt kaut ko vēl vienkāršāk, vai ne? Atskatoties pagātnē, atkal pārnešana pairwise un atkal, gandrīz nedaudz gudrs. Darīsim lietas vēl naivi, kur, ja es gribu, lai sakārtotu šiem ļaudīm, ļaujiet man tikai glabāt meklējat vismazākās elementu. Tātad tagad, 4 ir Vismazāk es esmu redzējis. Es esmu gatavojas atcerēties, ka. Nē, 2 ir labāk, un atcerieties, ka. 1 ir vēl mazāka. 3, 7, 5. OK. One-- kāds ir tavs vārds atkal? Artie: Artie. DAVID Malan: Artie. Tātad, Artie, iet uz priekšu. Es esmu gatavojas pull jūs no līnijas. Ja jūs varētu atgriezties šeit. Un man ir nepieciešams, lai padarītu telpu par viņu. Mums ir lēmuma pieņemšanas punktu šeit. Kā varētu mēs padarītu telpu Artie šeit sākumā, kur 1 numurs pieder? AUDITORIJA: Shift. DAVID Malan: Labi, mēs varētu pārdalīt ikvienam. Bet ierosināt optimizāciju. Ka jūtas mazliet kaitinošas man uzdot četri cilvēki , lai pārvietotu visu ceļu uz leju. Ko vēl es varētu darīt? AUDITORIJA: Switch tos. DAVID Malan: Switch tos. Un kāds ir tavs vārds atkal? JACOB: Jacob. DAVID Malan: Jēkabs, pārvietot. Daudz efektīvāk vienkārši ir Jacob mijmaiņas vietas ar Artie, pretstatā piespiežot četri visiem šiem ļaudīm, thank you very much, lai to pareizu pozīciju. Kas ir jauka par Artie tagad, viņš savā pareizā stāvoklī. Darīsim to vēlreiz. 2, kas ir mazākais skaits es esmu redzējis. 3, 7, 5. OK. 2 noteikti ir mazākais. Nav darīt jebkuru darbu. Darīsim to vēlreiz. 6. Mazākais? 8. Nope. 4? Ooh. Ļaujiet man atceros 4. 3. Ļaujiet man atcerēties 3. 7, 5. Vismazāk es esmu redzams uz šaujamieročiem ir 3. Ja jūs nākt uz out. Uz kurieni mēs ejam, lai jums? Un kāds ir tavs vārds? Alanna: Alanna. DAVID Malan: Alanna, mēs esam nāksies izlikt jums. Bet tas ir efektīvāka, tikai swap divus cilvēkus, nekā ir vairāki cilvēki tiešām sānsolis vairāk. Tagad pieņemsim darīt atkal. Es esmu gatavojas izvēlieties 4, lai nāk uz out. Un kas notiek, lai pārvietotos? Cipars 8, protams. Ja es tagad atrast skaitli 5, nāc ārā. Cipars 8 gatavojas saņemt izlikti vēlreiz. Es esmu tagad gatavojas atrast vairākus 6 vietā. 7 vietā. 8 vietā. Ko mēs vienkārši darīju tagad ir kaut kas ko sauc atlase kārtot, un, ja mēs vizualizēt to, tas ir gatavojas justies mazliet atšķirīgs. Iesim uz priekšu un no tā ēdienkarte šeit, tas visualization-- pieņemsim mainīt kuri paredzēti, come on, Firefox. Pieņemsim mainīt uz atlases veida. Un pieņemsim to paātrinātu kā iepriekš, un sākt vizualizāciju tagad. Un šis algoritms ir atšķiras sajust to. Uz katras iterācijas, atklāti sakot, tas ir vēl vienkāršāka. Es esmu tikai izvēloties mazāko elementu. Tagad, godīgi sakot, es saņēmu mazliet laimīgs, ka laiku, jo tas sakārtoti super-ātri. Elementi bija nejauši. Tas nav, kā mēs galu galā skat, būtiski ātrāk. Bet pieņemsim redzēt, trešais un pēdējais pieeju šeit, par to, kas notiek. Tāpēc iesim uz priekšu un reset jums puiši vienu gala laiks būt šādā secībā šeit. Un tagad, es esmu gatavojas būt nedaudz vairāk gudrs, tikai noapaļot mūsu algoritmus. Es esmu gatavojas darīt. Es esmu gatavojas neiet un atpakaļ tik daudz. Atklāti sakot, es esmu noguris viss tas šķērso. Es esmu tikai gatavojas ņemt to, kas es esmu dota sākumā saraksta, un es esmu gatavojas, lai sakārtotu ka tad un tur. Tātad, šeit mēs esam. Numurs 4. Es esmu gatavojas ievietot numuru 4 uz sakārtoti sarakstā. Gatavs. Es apgalvo tagad, un tikai, lai padarītu šo skaidrs, šī daļa no mana saraksta ir sakārtots. Tas ir sava veida stulba prasības, bet patiešām 4 tiek sakārtoti sarakstā izmēra vienu. Tagad, es esmu gatavojas uzņemties numuru 2. Numurs 2 Es esmu tagad gatavojas ievietot īstajā vietā. Tātad, ja nav 2 pieder? Acīmredzot, nekā šeit. Tik iet uz priekšu un pārvietot atpakaļ, ja jūs varētu. Un kāpēc nav jūs guys tikai ņemt jūsu mūzika stendi ar Jums šo laiku. Un pieņemsim piespiedu kārtā ievietot tevi uz saraksta sākumā. Tātad mazliet vairāk darba. Man bija, lai pārvietotos Jēkabu apkārt, un kāds ir tavs vārds? Amin: Amin. DAVID Malan: Amin. Bet vismaz man nebija iet uz priekšu un atpakaļ. Es esmu tikai ņemot lietas, kā man iet. Es esmu tikai ievietojot tos īstajā vietā. 6, tas ir faktiski diezgan viegli. Pieņemsim ievietot tevi tur, ja jūs tikai gribēju pāriet nedaudz. Numuru 8, arī diezgan viegli. Tiesības pār tur. Damn to. Number 1, mēs varam ne tikai mijmaiņas ar Amin šeit tāpēc, ka notiek izjaukt pasūtījuma. Tāpēc mums ir jābūt nedaudz vairāk gudrs. Tātad, Artie, ja jūs varētu atpakaļ uz augšu uz brīdi. Iesim uz priekšu un maiņu tagad, atšķirībā no mūsu iepriekšējiem algoritmiem, lai padarītu telpu Artie tepat sākumā. Tātad beigās, dienā, Es veida dara to, ko es gribēju, lai izvairītos pirms. Un tāpēc mans algoritms ir sava no atcelts, intelektuāli, no tā, kas sākotnēji bija. Es esmu tikai darot pārnesi citā vietā. Tagad es esmu pie 3. Ak, damn. Mums ir jādara vairāk darba atkal. Tāpēc pieņemsim push jums out. Pieņemsim pāriet 8, 6, 4-- oh oh-- un 3 gatavojas iet labi tur. Tātad vismaz nelieli ietaupījumi šoreiz. 7, ne pārāk daudz darāmā. Tātad, ja jūs vēlaties, lai pop atpakaļ, pieņemsim ievietot jums. Un visbeidzot, 5, ja jums vēlas pop atpakaļ, mēs nepieciešams novirzīt tevi, tevi, tu, kamēr pieci ir vietā. Tātad, tagad, lai redzētu šo pie augsta līmeņa grafiski, Darīsim to algoritmu vizualizācija vienu papildu laiks. Tātad šis mēs saucam ievietošanas veida. Mēs rādīsim to, tāpat kā ātra, un sākt to šeit. Un tas arī ir dažādas jūtas. Tas ir sava veida kļūst labāk un labāk, bet tas nekad nav ideāls kamēr es iet un gluda minētos trūkumus. Jo, atkal, es esmu tikai ņemot to, ko Es esmu tiek dota no kreisās uz labo pusi. Tāpēc es nedabūju tik laimīgs ka viss bija perfekti. Tieši tāpēc mums bija šie maz mispositions ka mēs fiksētu laika gaitā. Tātad visi šie algoritmiem, šķiet, palaist nedaudz atšķirīgus panākumus. Patiesībā, kas jūs teiktu, ir labākais vai ātrākais līdz šim? Burbulis kārtot, pirmais? Atlase kārtot, otrais? Ievietošanas kārtošanas, trešais? Es dzirdu kādu atlases veidu. Citas domas? Tātad izrādās, ka visas šīs algoritmu būtībā tikpat efektīvs kā katrs other-- vai, tieši otrādi, tāpat kā efektīvs kā viens otru, tāpēc, ka mēs varam darīt fundamentāli labāk nekā visi trīs Šo algoritmu. Un tas ir mazliet balta meliem, too. kad es saku, kā efektīvi vai kā neefektīva, kas ir vismaz super-lielas vērtības n. Kad mums ir tikai astoņi cilvēki šeit, vai varbūt 50 vai tik bāri uz ekrāna, jūs absolūti ievērosiet atšķirības starp šiem trim algoritmiem. Bet kā n, cilvēku skaits, vai vairāki numuru, vai cilvēku skaits tālruņa grāmata, vai skaits interneta lapas in Google datu bāzē kļūst lielāka un lielāka, mēs redzam, ka visi trīs no šiem algoritmi ir faktiski diezgan slikta. Un mēs varam darīt fundamentāli labāk nekā to. Pieņemsim to apskatīt, visbeidzot, par to, ko šie algoritmi varētu izklausīties in konteksts daži citi kā arī, izmantojot šo vizualizācija šeit kas ieviesīs mums skaits algoritmu. Iesim uz priekšu un apsveikt Mūsu dalībnieki šeit, no kuriem visi sakārtoti sevi ļoti labi. Ja vēlaties veikt Šķiršanās dāvanu. Jūs varat saglabāt savu numuru, kā arī. Un ko jūs redzēsiet, vai drīzāk dzirdēt, tagad, ir, ka mēs ieliekam skaņas katram no šiem stieņiem un saistīt to ar programmatūru, atšķirīgs biežums skaņas, Jūs varat wrap savu prātu vairāk audioly ap to, ko katrs no šīm lietām izskatās. Pirmais no tiem ir ievietošanas kārtošanas [TONES] Tas ir burbulis kārtošanas. [TONES] Atlase kārtošanas. [TONES] Kaut ko sauc sapludināšanas kārtošanas. [TONES] Gnome kārtošanas. [TONES] Tas ir tas CS50. Mēs redzēsim tevi trešdien. Teicējs: Un tagad, "Deep Domas, "ar Daven Farnham. Kāpēc tā ir cilpa? Kāpēc ne padarīt to labāku? Es gribētu darīt piecu cilpu. [Smiekli]