DAVID малая: Добра. Так што гэта CS50, і гэта Цяпер пачатак тры тыдні. Так да гэтага часу, мы не маю пісаў праграмы ў C што выглядае трохі как то так вось. Такім чынам, мы атрымалі пару Рэзкае ўключае ў верхняй частцы. У нас ёсць Int, галоўная, несапраўднымі, і затым тое, каб зрабіць у сярэдзіне, некаторыя кавалак кода ўнутры з гэтай функцыі. Але ключ быў той факт, што мы казалі несапраўднымі тут. Так несапраўднымі, увесь гэты час, паказвае што гэтая праграма, пры запуску, можа быць запушчаны толькі праз яго імя. Вы не можаце ўвесці любыя іншыя словы або Лічбы пасля назвы праграмы пры запусціць яго. Так, напрыклад, калі праграма была сабраны ў файле пад назвай Прывітанне, вы маглі б зрабіць ./hello, але што гэта такое. 

Адзіны спосаб, якім вы маглі б ўнесці свой уклад у гэтую праграму з'яўляецца шляхам выкліку функцыі. Напрыклад, што функцыя былі мы, выкарыстоўваючы да гэтага часу для атрымання дадзеных ад карыстальніка? 

АЎДЫТОРЫЯ: Атрымаць радок. DAVID малая: Каб атрымаць радок, або атрымаць Int, ці вы бачылі іншых, нават калі вы не выкарыстоўвалі іх яшчэ, як атрымаць шмат, шмат і да таго падобнае. Але выкажам здагадку, што мы на самой справе хочаце, каб пачаць напісанне праграм, якія трохі больш універсальны, і, шчыра кажучы, трохі больш як каманды, што вы атрымліваў, як мы спадзяемся, трохі прывыклі. Як кд прасторы Dropbox. Гэта, вядома, змены ваш каталог, мяркуючы вы знаходзіцеся ў доме Джона Гарварда каталог, у тэчку Dropbox. Між тым, каманда, як гэта стварае новую тэчку з імем pset2, як вы, напэўна, ужо ці хутка для задачы ўсталяваць два. Зрабіць Прывітанне, вядома, з'яўляецца камандай , Якая будуе праграму пад назвай прывітанне з файла пад назвай Прывітанне кропка з. І ў кожным з іх выпадкі, зараз, у нас было забяспечваюць аргумент на так званы каманднага радка, міргае хутка, так што марка ведае што будаваць, і так што MkDir ведае, што папка, каб стварыць, і так, што CD ведае дзе вы хочаце пайсці. Але да гэтага часу, мы ўвесь час кажуць што галоўная ваша функцыя па змаўчанні, ёсць выраз пустэч ўнутры гэтых дужак, Гэта азначае, што яго не можа прыняць ніякіх аргументаў. 

Так, пачынаючы з сённяшняга, тое, што мы збіраемся зрабіць ёсць, мы збіраемся пачаць падтрымкі такія рэчы нават. На самай справе, у гэтым выпадку, які вам як правіла, не ўручную ўвесці, Зрабіць рабіў гэта для нас, значыць не адзін, а адзін, два, тры дадатковых радкі пасля програмы па імя ляск. Так як жа нам гэтага дамагчыся? 

Ну, пачынаючы з сённяшняга дня, ў тых выпадках, калі мы хочам забяспечыць увод праз Так званы каманднага радка, мы збіраемся пачаць дадаваць тут тое, што ў yellow-- замена пустэчу агдс коскі Радок агду якая адкрывае дужка якая зачыняе дужка. Зараз гэта цікава на працягу некалькіх прычын. Адзін, гэта будзе запішам праграмы, якія трохі больш дынамічным. Але, больш пераканаўча, ён збіраецца адкрыць Цяпер размова, каб што масівы могуць сапраўды выкарыстоўвацца, для таго, што радкі сапраўды знаходзіцца пад капотам, да наступнага тыдня, калі мы не пачнем з аквалангам У яшчэ глыбей адносна таго, як машына робіць усё гэтыя рэчы працы. Але цяпер, давайце маляваць, магчыма, карціна. 

Калі вы пішаце праграму з асноўным заявіў У гэтым выпадку, такім чынам, што асноўная прымае два аргументу, Int и-- які тып дадзеных гэта другі аргумент? 

АЎДЫТОРЫЯ: Array. DAVID малая: Array. Так гэта выглядае на першы погляд, як быццам гэта радок, але зьвярніце ўвагу на квадратныя дужкі. Нагадаем, у апошні раз мы ўвялі Паняцце масіва. І масівы выкарыстоўваюць квадратныя дужкі праз пару кантэкстах. Вы можаце выкарыстоўваць плошчу кранштэйны ісці ў масіў і атрымаць канкрэтны элемент, як Кранштэйны 0 або кранштэйн 1 або кранштэйн 2. Але мы бачылі, калі коратка, на мінулым тыдні, што вы таксама выкарыстоўваць гэтыя квадратныя дужкі ў аб'явіць памер масіва, калі вы ведаеце загадзя, колькі Інтс ці колькі радкоў або ўсё, што вы на самай справе хочаце. Вось і атрымліваецца, што ёсць трэці кантэкст тут што не мае нумары ўнутры з квадратных дужках. Пры ўказанні, як у мяне тут, назва-то накшталт ARGV, , Які з'яўляецца проста мудрагелісты спосаб кажучы аргумент вектар, яшчэ адзін мудрагелісты спосаб кажучы масіў аргументаў, якая адкрывае дужка якая зачыняе дужка проста азначае, што вам не абавязкова загадзя ведаць, як вялікі Масіў будзе, але вы ведаеце, што гэта збіраецца быць масівам. Так што, калі вы не ведаеце, лік, не стаўце яго там, для адкрытай кранштэйна зачыняе дужкі азначае, што агду не з'яўляецца радком, але масіў радкоў. Так сінтаксічна, калі вам думаю на мінулым тыдні, гэта вельмі падобна, што сказаць нешта накшталт дзесятковага узростаў адкрываецца дужкі, а затым то пасля гэтага. Такім чынам, што ж гэта падобна? Давайце рэальна намаляваць карціну. Таму, калі вы запусціце гэтую праграму з асноўнымі Наяўнасць двух аргументаў вызначаецца ўнутры з тых дужках, вы істотна, па меншай меры два кавалка памяці перадаў вам пад капотам. Адзін, як я буду малюе як гэтага прастакутніка, збіраецца назваць агдс. І гэтак жа, як хуткай паўтарэнне, што тып дадзеных агдс? Так што гэта унутр. Так шэраг збіраецца пайсці ў argc-- паваротаў , Што азначае колькасцю аргументаў. Між тым, я намаляваў ARGV як масіў. І я сапраўды не ведаю, як доўга гэта будзе, так для сённяшніх мэтаў кропка кропка кропка. Гэта магло б стаць некаторай даўжыні. Але я на фота тут па меншай меры, чатыры прастакутнікаў. Так агду кавалак памяці, якая захоўвае радок радок радок кропка кропка кропка, і агдс з'яўляецца толькі адным кавалак памяці для цэлага ліку. 

Так што цяпер, давайце быць трохі больш дакладным. Калі, калі ў мяне ёсць радкі у гэтым масіве, называецца агду, я хачу атрымаць на іх індывідуальна, гэтак жа, як на мінулым тыдні, мы збіраемся выкарыстаць абазначэння як агду кранштэйна 0 каб атрымаць першае, што масіў. Агду кранштэйны 1, каб атрымаць Другая рэч, і гэтак далей. Ключавым момантам тут з'яўляецца тое, што мы па-ранейшаму 0 indexed-- мы ўсё яшчэ лічачы ад 0. Так што цяпер давайце на самай справе пакласці што-то ў гэтым. Калі б мне давялося скласці праграму пад назвай Прывітанне з файла пад назвай Прывітанне кропка з, а затым я запускаю гэтую праграму з пункту слэш прывітанне, што робіць мой кампутар, мой ноўтбук, выглядаць пад капотам момант я бягу кропка слэш прывітанне і націсніце Увод? Ну, гэта, бадай, тое, што мы маглі б апісаць як змест вашага кампутара памяці, ці памяці RAM-- Random Access. Іншымі словамі, кампутар, так ці інакш для вас чароўным, ставіць лічбу 1 у агдс, AKA ARGCOUNT, і гэта ставіць літаральна радок ./hello ў ARGV кранштэйна 0. Я паняцця не маю ,, шчыра кажучы, тое, што няма у ARGV кранштэйнам 1 або 2 ці 3, таму што, калі карыстальнік не мае набралі нічога, акрамя ./hello, мы будзем лічыць, што гэтыя з'яўляюцца найбольш верагоднымі значэннямі смецця, так бы мовіць. Гэтыя кавалкі памяці існуе, але гэта не да нас глядзець на іх, таму што ARGCOUNT толькі адзін. 

Цяпер, між тым, калі I напісаць запусціць іншую праграму, кд, што больш правільна каманда, ў вашым перарывістым prompt-- прасторы кд Dropbox-- калі я запускаю, што, па сутнасці, калі праграма кд запускаецца, агдс, ўнутры памяці майго кампутара, для найбольш долю секунды лік 2. А потым агду кранштэйны аб мае кд, агду кранштэйны 1 мае Dropbox, і тады, вядома, каманда завяршае, так уся гэтая памяць істотна сыходзіць і выкарыстоўваецца для іншага. І вось чаму я кажу толькі на долю секунды. 

Між тым, калі мы робім MKDIR pset2, карціна выглядае амаль гэтак жа, але з рознымі радкамі ўнутры ARGV. Калі я раблю ляск працяжнік прывітанне Прывітанне кропка з, тая ж ідэя. Больш матэрыялу запаўняецца для агду, і агдс, вядома, 4. Такім чынам, іншымі словамі, хоць гэтага масіва можа быць кропка кропка кропка, з некаторых зменнай даўжыні, так бы мовіць, Вы заўсёды ведаеце, дзе яго канец з'яўляецца, таму агдс збіраецца сказаць вам у які момант вы павінны спыніць гледзячы на ​​элементаў у ARGV. Вы можаце глядзець толькі на чатырох у агульнай складанасці ў гэтым выпадку. 

Такім чынам, давайце зірнем на, магчыма, простая праграма. Той, які проста кажа прывітанне каму то падабаецца Zamyla. Так я сцвярджаю, што я збіраюся напісаць праграму праз хвіліну, праз які я мог зрабіць ./hello прастору Zamyla, а затым я хачу мая праграма раздрукаваць то супер-проста, як "Прывітанне, Zamyla." Цяпер у мінулым мы выкарыстоўвалі GetString. Так у мінулым, нават калі Вы пачатковец у праграмаванні, напэўна вы маглі на хуткую руку праграма, якая выкарыстоўвае GetString а затым выкарыстоўвае Printf каб сказаць прывітанне Zamyla. Але давайце не будзем выкарыстоўваць GetString гэты раз. Дазвольце мне замест гэтага пайсці ў Appliant і не ўключаюць у сябе стандартныя Я O кропка гадзіну. Дазвольце мне таксама ўключаюць CS50 кропка гадзіну. Цяпер тап_п, і цяпер я не збіраецца рабіць несапраўднымі сёння. Замест гэтага, я збіраюся зрабіць агдс Радок агду якая адкрывае дужка якая зачыняе дужка, не пазначылі нумар. А цяпер вось мая так званая зрабіць. Тое, што я збіраюся зрабіць цяпер, гэта, я збіраецца зрабіць трохі скачку веры, Я буду лічыць, што карыстальніка збіраецца правільна выкарыстоўваць гэтую праграму, і я проста збіраюся зрабіць Е прывітанне,% Sn. Так што нічога новага там. Але я хачу, каб зараз пакласці ўсё, што слова карыстальнік пасля імя праграмы. Так што, калі я раблю ./hello прастору Zamyla, я хочаце-то праграмна доступ цытаваць канец цытаты "Zamyla." таму я можа пайсці ў маю аргументу вектара, мой масіў радкоў, і калі каманды, зноў, быў ./hello прастору Zamyla, які нумар я хачу пакласці ў ARGV тут? АЎДЫТОРЫЯ: 1. DAVID малая: 1, таму што Кранштэйны 0 аказваецца будзе Назва праграмы, як мы бачылі. Так кранштэйны 1 гэта першае слова што я, карыстальнік, набралі. Я збіраюся ісці наперад і захаваць гэта. Я збіраюся пайсці ў маю тэчку дзе я размясціў гэты файл. Я збіраюся зрабіць зрабіць прывітанне 3. ОК Comp НЛ. ./hello Zamyla Enter. Што я зрабіў не так? Я быў заспеты знянацку я на імгненне там. Што я зрабіў не так? 

АЎДЫТОРЫЯ: Імя. 

DAVID малая: файла на самай справе называецца hello3.c. І я зрабіў гэта толькі для кансістэнцыя, таму што мы была hello.c знаходзіцца ў міма у онлайн кода. Так давайце выправім гэтую ./hello Кранштэйны працяжнік 3 Zamyla. Enter. І зараз у нас ёсць прывітанне, Zamyla. Між тым, я магу змяніць гэта быць Роб, або сапраўды любое іншае слова. 

Але давайце разгледзім кутняй выпадак. Тое, што вы маглі б чакаць адбудзецца, калі Я не ўвесці імя чыю наогул? 

АЎДЫТОРЫЯ: Памылка. 

DAVID малая: памылка нейкі, магчыма. Паглядзім. Enter. Null. Так Е фактычна быць трохі абараняе нас тут, і літаральна друку адкрытыя Хлопец нуль, але нават горшыя рэчы могуць здарыцца. І толькі прадэманстраваць тое, што вы абсалютна ня варта рабіць, пойдзем у тут і пачаць корпацца. Дакладна? Калі я ведаю, што карціна ў памяці, па сутнасці, гэта, агду кранштэйны 1 мае Zamyla, ARGV Кранштэйны 0 мае ./hello або ./hello-3. Што ў кранштэйне 2? Так што я магу адказаць, што задаю сабе пытанне, ці не так? Я магу проста змяніць 1 да 2. Цяпер я магу перакампіляваць прывітанне 3, ./hello3 Давайце павялічваць і націсніце Увод. Упс. Няма двукоссі. Цікава. Так што нібыта выдатна паглядзець, што яшчэ тут. 

Так што яшчэ знаходзіцца ўнутры майго наўтбука? Давайце захаваем яго з кранштэйна 3. Зрабіць hello3, ./hello-3. Цікаўны. А цяпер давайце сапраўды bold-- 50. Так што на самой справе ныраючы глыбока у памяць майго кампутара. 50 Індэксы ў. Так што прывітанне 3 ./hello-3. Цікаўны. Добра, зараз я проста збіраецца атрымаць неразумныя. Пойдзем у 5000. Добра. Такім чынам, дазвольце мне перакампіляваць. Зрабіць hello3, ./hello-3. Добра. Цяпер некаторыя з вас, можа быць лямпачка сыходзяць. Як многія з вас ёсць бачылі гэта паведамленне раней? Добра. Такім чынам, чаму? 

Каэфіцыенты are-- і ёсць розныя рэчы, якія могуць прывесці да гэтага, і ясна, што ты ў добрай company-- у нас ёсць выразна выклікала тое, што называецца Сегментацыя віна. І карацей кажучы на ​​сённяшні дзень, я закранулі сегмента памяці што я не павінен мець. Дзе сегмент проста азначае кавалак памяці, што я не павінен мець. Цяпер кампутар гарантуе, што, калі я запусціць ./helloZamyla што я магу закрануць ARGV быць кранштэйны 0 і агду кранштэйны 1. Але агдс з'яўляецца значэнне 2, што азначае, што я толькі allowed-- гэта свайго роду гонар система-- дакрануцца Кранштэйны 0 і кранштэйн 1. Калі я іду далей, ёсць абсалютна будзе памяць ёсць. Мой RAM існуе фізічна ў кампутары. Але хто ведае, што там? На самай справе, я бягу кратнае праграмы ў адзін час. Я мог бы seen-- калі б я не быў рабіць гэта на Appliant але на маім Mac або PC-- я мог бы бачыў змесціва электроннай пошце. Я, магчыма, бачылі імгненне паведамленне Я нядаўна паслаў. Усё, што можа быць захоўваюцца вакол у памяці можна было б атрымаць па спосабе гэта адвольная квадратная натацыя кранштэйн. Або, што яшчэ горш, вы, магчыма, знайшоў аднаго з маіх пароляў што я ў апошні час набралі ў, што Праграма была захоўвацца ў памяці, так як для аўтэнтыфікацыі мяне, і то толькі збольшага пакінуў яго ў памяці, пакуль я не пайшоў гэтую праграму. 

І на самай справе, гэта адзін з небяспека і адна паўнамоцтвы выкарыстання мовы як С. У вас ёсць вольны доступ на ўсе ўтрыманне памяці праграмы, і якія дрэнныя хлопцы могуць нават зрабіць у тых cases-- Асабліва, калі мы атрымаць на вэб-праграмавання да канца семестра, мы будзем вярнуцца да гэтага topic-- будзе капацца, патэнцыйна, хто гэта кампутара памяці і знайсці такія цікаўныя рэчы як мы бачылі там. Ці нават яшчэ горш, паролі, што ён або яна можа выкарыстоўваць, каб рабіць дрэнныя рэчы. 

Такім чынам, ясна, я не павінен быў рабіць гэтага, таму дзіўныя рэчы пачынаюць адбывацца. На самай справе, гэта праграма грукат. Гэта было б раўназначна з Mac OS або ў АС Windows Акно праграмы проста знікаюць. Раптоўная памылка. У асяроддзі каманднага радка мы бачым нешта падобнае. Але менавіта таму, як я, проста датыкаючыся памяці, што не належыць мне. 

Так што давайце абараняцца ад гэтага а Крыху па-іншаму гледзячы на ​​гэтай праграме. Такім чынам, зноў жа, шкілет што мы бачылі earlier-- і я вылучыў гэты раз Int. І ўвесь гэты час галоўным мае На самай справе вяртаецца значэнне. Нават пры тым, што ў большасці нашых лекцыі прыклады мы ні разу не выкарыстоўвалі нічога вяртаць у асноўны. Мы проста напісаць PRINTF блізка фігурная дужка і вось яно. Але бясплатна, што кампілятар рабіў для вас, эфектыўна, вяртаецца 0 для вас. Аказваецца out-- і гэта крыху counterintuitive-- што 0 гэта добра. Гэта не значыць, хлусня сама па сабе. 0 добра, і любы не-0 Значэнне, што свет вырашыў, можа азначаць памылку. Так што калі вы яшчэ не сапсаваў то на вашым кампутары, ці праграма толькі што памёр ад вас і Вы атрымалі некаторыя памылковыя акно на экране, кажучы пра памылку адмоўнае 49 або памылка 23-- некаторыя, здавалася б, адвольнае value-- вось таму праграміст жорстка Значэнне як адмоўны 49 або станоўчае 23 для прадстаўлення любога ліку, адважуся сказаць, з 4000000000 магчымых рэчаў што можа пайсці не так у праграме. 

Так як я мог бы ўзяць Перавага гэтага я? Ну, дазвольце мне адкрыць праграму што я напісаў загадзя, і капацца онлайн называецца прывітанне 4. І гэта амаль ідэнтычныя, за выключэннем таго, яе атрымалі трохі праверкі памылак. У гэтым выпадку, я зноў заявіў Асноўны, як якая прымае два аргументу, але на гэты раз, у радку 17, апавяшчэнне Я раблю трохі для праверкі адсутнасці памылак. Я пераканаўшыся, што агдс роўная роўная 2. Таму што калі гэта так, што азначае, што я магу бяспечна закрануць не толькі кранштэйны 0, але кранштэйны 1. І я іду наперад і раздрукаваць, У гэтым выпадку, Zamyla або Rob або што слова, якое я надрукаваў. І цяпер толькі, каб атрымаць трохі больш правільным, Я збіраюся відавочна вярнуцца 0 для абазначэння ўсё добра. Нічога дрэннага не здарылася. 

Але паводле пагаднення, я збіраюся вярнуцца 1, або адкрыта любы не-0 значэнне, калі што пайшло не так. Зараз карыстальнік не збіраецца заўважаеце, што адбываецца. Сапраўды, калі я іду ў гэты каталог, мы павелічэння і робяць прывітанне 4, ./hello-4 Zamyla паводзіць сябе, як я чакаю. Але калі я, замест ня ўводзьце нічога, нічога, здаецца, адбудзецца, але гэта не катастрофа. І калі я, замест то рабіць як Роб з'яўляецца суправаджалы у Thayer-- абмену адвольная інфармацыя. Але заўважце, агду 1, 2, 3, 4, і Цяпер 5 павінен існаваць у памяці. Гэта таксама не тое, што мая праграма чакае, таму што я ці праверыў агдс роўная роўная 2 ці не. Так што я цяпер абараняе супраць гэтага. 

Зараз, як у бок, мы programmer-- ці хутчэй мы users-- ніколі не бачыць, што 0 або 1, але з выкарыстаннем Інструмент пад назвай адладчык або іншых інструментаў, як мы ўбачым перад доўга, вы праграміст можа ўбачыць, што можа быць адбываецца не так ўнутры вашай праграмы. 

Такім чынам, любыя пытанні па агдс? Так. 

АЎДЫТОРЫЯ: я бачыў, дзе яны не мелі характар, [неразборліва] проста сказаў радок зоркі д, як характар ​​зорачка коска. Ці з'яўляюцца яны эквівалентныя тут? 

DAVID малая: Яны. Такім чынам, пытанне, у вас ёсць часам бачыў праграмы як гэта, што не кажуць радок агду кранштэйны але замест гэтага нешта сказаць як сЬаг зорка агду кранштэйна. І ёсць нават сябра варыянты, якія вы можаце бачыць. Яны сапраўды эквівалентныя. У цяперашні час, у нас ёсць гэтыя роду падрыхтоўкі колаў на ў выглядзе радка ў CS50 бібліятэка, але ў крыху больш за тыдзень ці такім чынам мы збіраемся выдаліць, што абструкцыя ў цэлым і на самай справе Паглядзіце, што вугаль і зоркі , І як тыя, ставяцца да памяці прадстаўленне ў цэлым. Такім чынам, мы вернемся да гэтага. 

Іншыя пытанні па нашай ARGV або агдс? Так. АЎДЫТОРЫЯ: Чаму гэта вярнуцца Памылка [неразборліва]? DAVID малая: Чаму зрабіў гэта вяртае памылку only-- о! У папярэднім выпадку, калі мы былі важдацца вакол з памяццю, чаму гэта толькі вяртае памылку калі я сапраўды набралі вялікая колькасць? Кароткі адказ, мы проста пашанцавала. Наогул кажучы, кампутар вылучае памяць у кавалках, і ён даў мне досыць вялікі кавалак, што Я пайшоў, не будучы заўважаным, кранальнай кранштэйна 2, кранштэйна 3, Кранштэйны 50, але як толькі я націснуў мая ўдача, я пайшоў за Межы кавалак памяці аперацыйная сістэма дала мне. І вось, калі яго прыціскаюцца і сказаў, няма. Памылка сегментацыі. Так. 

АЎДЫТОРЫЯ: Як кампутар ведаць значэнне агдс? 

DAVID малая: Як кампутар ведаць значэнне агдс? Калі вы запускаеце праграму, што праграма, па характары якая мігціць радку перадаецца масіў Словы, якія былі ўведзеныя у камандным радку, што было друкуецца ў падказцы. І так гэта ваша аперацыйная сістэма, якая па сутнасці запаўняе аргументы галоўных для вас. Дык вось адна з паслуг што вы атрымаеце, свайго роду таемна пад капотам аперацыйнай сістэмы. Іншыя пытанні? Так. 

АЎДЫТОРЫЯ: Што гэта значыць дамп? DAVID малая: Што гэта значыць дамп? Так што гэта добрае пытанне. І дазвольце мне вярнуцца ў гэты каталог тут. І вы заўважыце, што У мяне ёсць новы файл там. Гэта сапраўды называецца ядро, і гэта на самай справе, як правіла, прыстойнага памеру файла. Гэта значыць па сутнасці здымак змесціва памяці маёй праграмы або АЗП, калі ён разбіўся. І гэта будзе карысна, патэнцыйна, дыягнастычнаму, як толькі мы кажам у будучай лекцыі і падзел аб адладцы, таму што вы можаце на самой справе рабіць эквівалент лічбавай выкрыцця на гэтым файле, каб дапамагчы высветліць тое, што вы зрабілі не так у вашай праграме. Так. 

Залы: агдс каманды ў Сам, ці вы можаце назваць гэта нічога? 

DAVID малая: Добры пытанне. З'яўляецца агдс каманды ў сабе, ці вы можаце назваць гэта нічога? Гэта вызначана не з'яўляецца камандай. Гэта проста зменнай імя або імя аргументу ў, і так абсалютна Можна назваць гэта Foo, мы маглі б назваць гэты бар, якія маюць тэндэнцыю быць выхаду на словах, што кампутарныя вучоны ідзе ў. Але паводле пагаднення, мы выкарыстоўваем ARGC і ARGV. Але гэта ўсяго толькі чалавек Канвенцыя, не больш за тое. Добра. Так атрымліваецца, я быў кажу трохі белага lie-- і, шчыра кажучы, у будучыні, вы ўбачыце мы казалі іншыя белыя хлусня. Але цяпер, мы збіраемся адхіліце адзін з іх. У гэтым выпадку тут, калі я раней пабег праграму як ./hello або ./hello-3 Zamyla, мы павінны былі змесціва майго памяці кампутара, гледзячы прыкладна як гэта. Але ўспомнім, што радок з'яўляецца. Што мы гаворым, тыдзень таму, што радок на самай справе пад капотам? АЎДЫТОРЫЯ: Масіў знакаў. DAVID малая: Гэта масіў сімвалаў, ці не так? Такім чынам, мы, магчыма, ёсць масіў радкі, але, у сваю чаргу, радок гэта масіў знакаў. Так што, калі я сапраўды хачу быць анал, калі я малюю гэтую карціну, Я павінен сапраўды быць малюнак гэта крыху больш, як гэта, прычым у кожнай з іх Індэксы маёй агду масіва, існуе сама па сабе ўвесь радок , Што само па сабе ў масіве. А цяпер хлусня мы кажам сёння з'яўляецца тое, што карціна не выглядаюць цалкам так. На самай справе, невялікія квадраты звычайна за межамі вялікіх прастакутнікаў ёсць. Але мы вернемся да таго, што ў хуткім часе. Але гэта ./hello зваротны слеш 0, што быць адмысловы сімвал, які размяжоўвае канец радка, і ў нас ёсць яшчэ адзін за Імя Zamyla ст. Дык што ж гэта значыць? 

Ну, дазвольце мне ісці наперад і адкрыць дзве іншыя прыклады , Якія даступныя ў Інтэрнэце. Адна з іх завецца argv1.c , А другі argv2. Гэта супер-простая праграма, якая адрозніваецца ад мінулых праграм у тым, што цяпер я выкарыстоўваю агдс і ARGV тут. І зараз я інтэграцыі з цыкл у радку 18, ад г = 0 на да ARGC. І што ж я буду рабіць з гэтага радка кода тут? На англійскай. Гэта, відавочна, дэманструе выкарыстанне агдс. Але ў англійскай мове, што робіць гэта зрабіць, калі я запусціць гэтую праграму? Так? 

АЎДЫТОРЫЯ: Гэта будзе друкаваць вашыя экран столькі разоў, колькі вы хочаце. DAVID малая: Точно. Таму, што б словы ўводу ўвядзіце ў камандным радку, гэта збіраецца выкінуць ім на мяне па адным у радку. Так што давайце ісці наперад і рабіць гэта. Адпусьці мяне ў маім каталогу і робяць argv1 ./argv1. А цяпер, давайце трымаць яго проста. Давайце нічога не рабіць у першую чаргу. Гэта зрабіў раздрукаваць адну рэч, і вось сапраўды назва праграмы, таму што гэта ў кранштэйне 0. Калі я зараз сказаць Фу, ён збіраецца зрабіць гэтыя двое, і калі я кажу Foo бар, ён збіраецца сказаць гэтыя тры рэчы. Цяпер вось некалькі цікава, можа быць. Але нагадаем, што ARGV з'яўляецца масіў радкоў, але радок гэта масіў сімвалаў, так што мы можам узяць рэчы на ​​прыступку вышэй і прымяніць, што асноўная Логіка і зрабіць код, які выглядае крыху больш загадкавым, па агульным прызнанні. Але, маючы укладзены цыкл, то падобна да таго, што вы, магчыма, памятаеце з Марыё, напрыклад, калі вы зрабілі гэта такім чынам. 

Так што цяпер заўважыць у радку 19, я зноў перабору маіх аргументаў, ад 0 на да ARGC. І цяпер у адпаведнасці 21-- Я запазычанні трук з апошняга week-- Я правяраю, што з'яўляецца Даўжыня агду кранштэйна I. Я захоўваю гэты адказ у п. А потым я інтэгруючы ад J на да п, дзе J усталёўваецца на 0. Так, Канвенцыя для падліку. Калі вы ўжо выкарысталі I, калі ў вас ёсць укладзены цыкл, вы не можаце выкарыстаць я зноў, у адваротным выпадку вы будзеце калашмаціць, патэнцыйна, значэнне за межамі ўнутранага цыклу. Таму я выкарыстоўваю J па пагадненні. Мы маглі б выкарыстоўваць к. Калі ў вас ёсць больш, чым да, вы, верагодна, занадта шмат ўкладзенасці, звычайна. Але цяпер, заўважыў майго Printf лінія трохі адрозніваецца. Я не друкуе% S, я друк% С, што, вядома, з'яўляецца запаўняльнікам для гольца. 

А цяпер звярніце ўвагу гэты сінтаксіс. Новы. Мы не бачылі яго раней. Але лагічна, гэта проста азначае, атрымаць-ы радок у ARGV і атрымаць JTH які? АЎДЫТОРЫЯ: Характар. DAVID малая: Характар ​​у гэтым радку. Так з дапамогай квадратных дужак затым квадратных дужках, гэта дайвінг першы у радкі ARGV ў, , А затым другі квадратныя дужкі з J дайвінг ў характарах што пэўная радок у ARGV. А потым, для роўнага рахунку, Я друкую новую лінію тут. Так што цяпер дазвольце мне ісці наперад і адкрыць да трохі большага акне так што мы можам убачыць гэта ў дзеянні. Адпусьці мяне ў гэтай тэчцы. А цяпер робяць агду-2-- whoops-- зрабіць ARGV-2, ./argv 2. Enter. І гэта трохі цяжка чытаць вертыкальна, але гэта сапраўды імя Праграма, пасля чаго пусты радку. Цяпер дазвольце мне ісці наперад і рабіць нешта. Аналагічна цяжка чытаць, але гэта сапраўды друку аднаго знака ў радку. А калі я бар, то зараз друк тыя парадкова. Так вынас тут не столькі што, нічога сабе, глядзець на гэтай акуратнай новы трук дзе вы можаце атрымаць на змесціва спецыфічных літар масіў у, а тое, як мы прымаем гэта асноўная ідэі, як індэксаванне ў масіў, а затым індэксацыі ў Масіў, які быў у гэтым масіве, і проста ужываючы тыя ж ідэі трохі больш складаныя прыклады. Але асновы сапраўды ня змянілася, нават з мінулага тыдня. 

Зараз гэта свайго роду своечасова, ў тым, што, нагадаем, у нулявы тыдні мы гулялі з тэлефоннай кнігай, як гэта. І хоць гэта, відавочна, фізічныя кавалачкі паперы, Вы можаце роду думаць Тэлефонная кніга ў выглядзе масіва. Вядома, калі б вы былі паўторна рэалізаваць гэта кавалачкі гэтыя паперкі ў кампутары, магчыма вы павінны выкарыстоўваць тое як масіў для захоўвання ўсіх тых, імёны і нумары з усіх шляху да Z. Так што гэта добра, таму што гэта дазваляе нам магчымасць, магчыма, разгледзець, як вы маглі б на самай справе рэалізаваць нешта падобнае. Як і ў серыі дзвярэй тут. Так што, калі я could-- нам трэба адзін добраахвотна прыйсці на да. Паглядзім. Незнаёмы твар, магчыма, незнаёмы твар, магчыма. Як наконт аранжавым колерам? Вось. Аранжавы кашуля, давай до. 

Давайце пойдзем далей зараз і ход гэтыя дзверы на бок, рухацца іх з шляху на імгненне. Як цябе завуць? 

AJAY: 

DAVID малая: Аджай. Дэвід. Прыемна пазнаёміцца. Добра. Такім чынам, мы маем за гэтыя шэсць Дзверы ў лічбавым выглядзе screen-- ці, хутчэй, сем дзвярэй на screen-- цэлую кучу лічбаў. І я не сказаў вам нічога у advance-- пагадзіўся? AJAY: Нічога загадзя. DAVID малая: Усё, што я хачу, каб ты Зараз, каб знайсці для мяне, і для нас, сапраўды, лік 50, адзін крок за адзін раз. 

AJAY: Нумар 50? 

DAVID малая: 50 Колькасць. І вы можаце паказаць тое, што гэта За кожным з гэтых дзвярэй проста датыкаючыся да яго пальцам. Чорт вазьмі. [Смех] 

[Апладысменты] 

Вельмі добра зроблена. Добра. У нас ёсць выдатны падарунак Прыз для вас тут. Ваш выбар фільмаў мы абмеркавалі на мінулым тыдні. 

AJAY: О, Божа. О, я ніколі не бачыў SpaceBalls. 

DAVID малая: Касмічныя яйкі. Добра. Так трымаць толькі на адзін момант. How-- давайце зробім гэта навучальнасць moment-- як вы ісці аб знаходжанне колькасці 50? AJAY: Я абраў выпадкова. DAVID малая: Такім чынам, вы абралі выпадкова і пашанцавала. AJAY: Так. DAVID малая: ОК. Выдатна. Так што цяпер, было вам не сталі удачлівымі, што яшчэ магло б адбыцца за гэтымі дзвярыма? Так што, калі я іду наперад і выявіць гэтыя лічбы тут, яны на самой справе ў выпадковым парадку. І лепшае, што вы маглі б мець зроблена, шчыра кажучы, па, у канчатковым рахунку ,, у горшым выпадку, праверка іх усіх. Такім чынам, вы атрымалі супер-пашанцавала, што не тое, што мы назвалі б алгарытм. Так, віншую. Але цяпер let's-- гумару мяне, калі б вы маглі. Пойдзем у гэтай ўкладцы тут. А вось лічбы ў выразна што, здаецца, выпадковы парадак, , І яны былі. Але цяпер, калі я замест прэтэнзіі што за гэтымі дзвярыма гэта лікі, якія сартуюцца. Зараз мэтай з'яўляецца таксама знайсці нам нумар 50. Але зрабіць гэта алгарытмічных, і раскажыце, як вы збіраецеся пра гэта. І калі вы знойдзеце яго, вы трымаеце фільм. Вы не знаходзіце гэта, вы даяце яго назад. AJAY: Так што я збіраюся праверыць канцы па-першае, каб вызначыць, there's-- [Смех і апладысменты] DAVID малая: Тут вы ідзяце. Давайце зірнем на адзін папярэднікаў Аджая, Шон, які быў не гэтак удачлівы. Такім чынам, ваша задача тут, Шон, складаецца ў наступным. Я хаваецца за іх Дзверы лік сем, але прыбраны ў некаторых з гэтых дзвярэй а іншыя неадмоўныя колькасці. І ваша мэта думаць пра гэта Верхні шэраг лікаў, як толькі масіў. Мы проста паслядоўнасць частак паперы з нумарамі за імі. І ваша мэта, толькі з дапамогай верхняй Масіў тут, знайсці мне нумар сем. І мы тады будзем крытыкаваць як вы хадзіце рабіць гэта. Знайсці нам нумар сем, калі ласка. Колькасць 5, 19, 13. Гэта не пытанне з падвохам. 1. У гэты момант ваш кошт не вельмі добра, так што вы маглі б таксама працягваць ісці. 3. Працягвай. Шчыра кажучы, я не магу не задацца пытаннем, тое, што вы нават думаць аб. 

Шон: Я магу ўзяць толькі з верхняга шэрагу. DAVID малая: толькі верхні шэраг. Такім чынам, вы атрымалі тры засталося. Так знайдзіце мне 7. 

[Аўдыторыя крычыць ПРАПАНОВЫ] Так як з іх былі дзіўна па вельмі розных прычынах. Так што гэта, дзе мы спыніліся хвіліну назад, і ключавых ідэй тут было гэтыя дзверы былі нумары за імі, якія былі адсартаваныя, ідэальным вынас, для якіх з'яўляецца тое, што вы маглі б зрабіць прынцыпова лепш у гэты другі example-- і, сапраўды, гэта было Шона Першая спроба з выпадковых лікаў гэтак жа, як before--, але як толькі як гэтыя лічбы сартуюцца, гэтак жа, як у тэлефоннай кнізе, што вы можаце, відавочна, рабіць? Ці, як можна выкарыстоўваць гэтыя веды? Так. 

АЎДЫТОРЫЯ: Вы ідзяце на паўшляху [неразборліва]. DAVID малая: Так. Дакладна. Так пачатковая інстынкт Аджая было праверыць канцы, наколькі я памятаю, а затым мы накшталт аздабленнем Прыклад хутка. Але калі мы пачалі рабіць гэта больш метадычна ўздоўж гэтых ліній, але пачынаючы, магчыма, у сярэдні, таму што яны сартуюцца, як толькі мы адкрываем нумар 16, таму мы знаю-- і давайце рабіць тое, that-- мы Таму ведаю, што 50, у сённяшнім выпадку, трэба быць справа. Гэтак жа, як у нулявым, калі тыдзень мы разарвалі тэлефонную кнігу напалову і кінуў палову Праблема ж, тая ж ідэя тут. Мы можам кінуць гэтую палову праблемы далёка. І, напэўна, тое, што вас можа зрабіць алгарытмічных, як толькі вы ведаеце, што 50 павінна быць направа, калі гэта ў любым месцы, гэта паспрабаваць там, у сярэдзіне з пакінутых дзвярэй. Вядома, 50 вышэй чым 42, таму мы можам кінуць гэта астатнія чвэрць праблемы ў бок, і, нарэшце, вызначыць нешта накшталт 50. Але гэтак жа, як з Тэлефонная кніга, гэтыя лічбы былі дадзены нам ужо ў адсартаваны парадак, які пакідае нас з пытаннем, як вам атрымаць рэчы ў пэўным парадку? І, шчыра кажучы, па якому кошту? Гэта адна рэч, каб быць перадаў тэлефонную кнігу а затым вырабіць ўражанне на сваіх сяброў, знаходзячы нумар тэлефона сапраўды хутка, ці не так? Раздзіраючы 32 старонак, каб знайсці чалавек з 4 мільярдаў старонак, мы сказалі быў адным яркім прыкладам. Але колькі часу гэта зойме Verizon для сартавання тэлефоннай кнігі? Колькі часу гэта зойме нас сартаваць гэтыя сем лічбаў? Гэта пытанне, які мы да гэтага часу цалкам ігнаруюцца. 

Так што давайце адказаць на гэтае пытанне цяпер. І мы ўсе з фільмаў зараз, але ў нас ёсць некаторыя стрэс шары. Калі, скажам, восем добраахвотнікаў Не пярэчыў бы далучыцца да нас тут? Давайце ісці наперад і рабіць, як пра вы чацвёра, трое з вас тут? Атрымаць новыя асобы. І чатыры з вас ёсць? І now-- давайце не зрушэння здесь-- і нумар восем сюды на канцы. Падымайцеся. Добра. Такім чынам, што мы маем тут для кожны з вас з'яўляецца лік. Калі вы хацелі б пайсці наперад, узяць гэты нумар. Як цябе завуць? 

Арты: Арты. 

DAVID малая: Арты, добра. Ты лік 1. 

AMIN: Амін. DAVID малая: Амін. Дэвід. Ты лік 2. І ісці наперад, а я перадаю Вы лісты паперы, выстройваюцца сябе ў пярэдняй частцы музыкі выступае ў тым жа парадку, што і там. 

ANDY: Прывітанне, Эндзі. 

DAVID малая: Эндзі, гэта прыемна бачыць вас. Нумар 3. 

JACOB: Якаў. 

DAVID малая: Якаў, лік 4. Сардэчна запрашаем на борт. Гранты: Грант. DAVID малая: Грант. Нумар 5. 

Алан: Алан. 

DAVID малая: Алан, лік 6. 

Франчэска: Фрэнсіс. DAVID малая: Фрэнсіс, лік 7. І? 

Рейчел: Рэйчел. 

DAVID малая: Рэйчел, лік 8. Добра. Ідзем далей і атрымаць сабе ў гэтым парадку. Дазвольце мне сказаць адну астатнія музыка стаіць на месцы. Дзе вам патрэбен стэнд? Добра. Ідзем далей і проста паставіць свае нумары дзе гледачы могуць убачыць іх на, пюпітр вонкі. І, спадзяюся, наша першая праверка спраўнасці здесь-- 4, 2, 6. Ой-ой. Пачакай хвіліну. Мы не маем 8. Мне трэба выселіць вас з Прыклад-то. Колькасць Не, гэта нармальна. Паглядзім. Мы можам зрабіць гэта. Чаканне. Там мы ідзем. Правільна. Добра. Такім чынам, зараз у нас ёсць 8, 1, 3 ліпень, 5. Добра. Выдатна. 

Так што пытанне ў руцэ, у якім коштам, і праз тое, што метад, мы можам на самай справе разабрацца гэтыя лічбы тут так што мы можам часткова працаваць у зваротным кірунку, у канчатковым рахунку, і decide-- гэта сапраўды ўражвае, гэта сапраўды эфектыўным, што я магу падзяліць і заваяваць тэлефонную кнігу? Гэта сапраўды эфектыўна, што Я магу падзяляй і ўладар гэтыя лічбавыя штук паперы на борце, калі магчыма, гэта будзе каштаваць нам стан у часе або энергіі або цыклы працэсара на самой справе атрымаць нашы дадзеныя у якой пэўным парадку? Так што давайце задаць гэтае пытанне. 

Так перш за ўсё, гэтыя лічбы у значнай ступені выпадковым парадку, і я збіраюся прапанаваць адзін алгарытм, або працэс , З дапамогай якога мы можам разабрацца гэтых людзей. Я збіраюся падысці гэта даволі наіўна. І я збіраюся прызнаваць што гэта накшталт шмат для мяне абгарнуць свой розум вакол ўсталяваць цэлыя дадзеныя адразу. Але вы ведаеце, што? Я збіраюся зрабіць некаторыя вельмі простыя гранічныя выпраўлення. 4 і 2 выйшлі з ладу, калі мэта складаецца ў тым, каб перайсці ад 1 да ад 8. Такім чынам, вы ведаеце, што? Я буду мець вас хлопцы памяняць, калі вы пераключыцеся фізічна пазіцыі і Вашы кавалачкі паперы. Зараз 4 і 6, гэта ў парадку. Я збіраюся пакінуць тыя быць. 6 і 8, тыя, у парадку. Going, каб пакінуць іх у спакоі. 8 and1, не ў парадку. Калі вы два не пярэчыў бы замены. Цяпер 8 і 3, калі вы, хлопцы, маглі абмяняць. 8 і 7, калі вы, хлопцы, маглі абмяняць. І 8 і 5, калі вы, хлопцы, маглі абмяняць. 

Зараз, я зрабіў? Не, відавочна, няма. Але я зрабіў Сітуацыя лепш, ці не так? Як там ваша імя, нумар 8? 

Рейчел: Рэйчел. DAVID малая: Так Рэйчел эфектыўна бурбалкі даволі далёка, ўвесь шлях да канца мой масіў лікаў тут. І так, што праблема збольшага вырашана. Цяпер, відавочна, 2 ўсё яшчэ мае патрэбу ў рухацца крыху, і 4 і 6 і 1. Але я, здаецца, атрымалі ледзь бліжэй да вырашэння. Так давайце выкарыстоўваецца і ў дачыненні гэты ж наіўна эўрыстычны зноў. 2 і 4, ОК. 4 і 6, ОК. 6 і 1, мм мм. Давайце своп. 6 і 3, мм мм. Давайце своп. 6 і 7 у парадку. 7 і 5, Не. Давайце своп. А цяпер 7 і 8. І тое, што цябе клічуць? Франчэска: Фрэнсіс. DAVID малая: Фрэнсіс. Так што цяпер Фрэнсіс знаходзіцца ў яшчэ лепш Становішча, таму што цяпер 7 і 8 правільна прапускаюць да вяршыні. Так 2 і 4, ОК. 4 і 1, своп давай. 4 і 3, своп давай. 4 і 6, што ты ў парадку. 6 і 5, своп давай. І цяпер гэтыя хлопцы добрыя. Мы амаль на месцы. 2 і 1, з таго, так памяняць. А цяпер зробім просты тэст. 2 і 3, 3 і 4, 4 і 5, 5 і 6, 6 і 7, 8. Такім чынам, мы скончылі. 

Але якой цаной я таксама сартаваць тут гэтыя лічбы? Ну, колькі крокаў я таксама патэнцыйна прыняць пры сартаванні гэтых людзей? Ну, мы яшчэ вернемся да гэтага пытання. Але, шчыра кажучы, калі вы атрымалі трохі сумна, вось і выгляд выяўленне ў тым, што гэта не было можа быць, самы эфектыўны алгарытм. І на самай справе, калі шчыра, я потею тым больш ісці назад і наперад. Гэта не адчуваў сябе асабліва эфектыўным. Так давайце паспрабуем што-то яшчэ. Калі вы, хлопцы, маглі скінуць самі ў гэтых васьмі значэнняў. Выдатная праца. 

Давайце зірнем у лічбавым выглядзе, для ўсяго Секунду назад мы паспрабаваць нешта яшчэ, на тое, што толькі што адбылося. Тут, наверсе, вы зараз ўбачыце візуалізацыя гэтых васьмі людзей у выніку чаго сіні і чырвоны бары прадстаўляць ліку. Чым вышэй палоска індыкатара, Чым больш лік. Чым карацей бар, чым менш лік. І тое, што вы будзеце бачыць у выпадковым парадку больш за восем з іх. Вы будзеце бачыць гэтыя бары атрымліваць адсартаваны па гэтай жа алгарытме, або набор інструкцый, якія мы будзем называць у далейшым пузырьковый сартавання. Так заўважыць, кожную секунду або каля таго, два бара асвятляючы чырвоным, параўноўваюцца кампутарам. І потым, калі вялікі бар і невялікі бар выйшлі з ладу, яны маглі быць абменены для мяне. 

Зараз гэта неверагодна стомна глядзець гэта, вядома, вельмі доўга, але звернеце ўвагу, takeaway-- вялікія бары, якія рухаюцца направа, невялікія бары рухаюцца налева. Давайце спыніць гэты працэс і паскорыць гэты працэс каб быць нашмат хутчэй, таму мы можам атрымаць высокага ўзроўню пачуццё што, сапраўды, пузырьковый сартавання робіць. На самай справе, гэта б'ецца, каб Правая частка спісу, або масіў, тым больш бараў. І наадварот, маленькія бары бурбалкі свой шлях ўніз налева, хоць у больш хуткім тэмпе чым мы раней зрабілі. Так, складаней ўбачыць з людзьмі, але візуальна гэта сапраўды тое, што адбывалася. 

Але давайце паспрабуем прынцыпова Іншы падыход цяпер. Давайце паспрабуем іншы Алгарытм, якім мы павінны вас хлопцы пачынаюць у іх арыгінальны пазіцыі, якая была такой парадак тут. І давайце ісці наперад цяпер. І я збіраюся зрабіць тое яшчэ прасцей, ці не так? У рэтраспектыве, абмен парамі раз і зноў, амаль трохі разумны. Давайце рабіць рэчы яшчэ больш наіўна, дзе, калі я хачу, каб адсартаваць гэтыя людзі, дазвольце мне працягваць глядзець для найменшага элемента. Так прама зараз, 4 з'яўляецца найменшая колькасць я бачыў. Я буду памятаць гэта. Не, 2 лепш, і памятайце, што. 1 яшчэ менш. 3, 7, 5. Добра. Одно-- як цябе клічуць зноў? 

Арты: Арты. 

DAVID малая: Арты. Так, Арты, ісці наперад. Я збіраюся выцягнуць вас з лініі. Калі б вы маглі вярнуцца сюды. І мне трэба, каб вызваліць месца для яго. У нас ёсць пункты прыняцця рашэння тут. Як мы маглі б вызваліць месца для Арты тут У пачатку, калі лік 1 належыць? 

АЎДЫТОРЫЯ: Shift. 

DAVID малая: Добра, мы можа зрушыць ўсіх. Але прапанаваць аптымізацыю. Гэта адчувае сябе крыху раздражняе для мяне, каб спытаць чатыры чалавекі рухацца ўвесь шлях ўніз. Што яшчэ я мог зрабіць? 

АЎДЫТОРЫЯ: Пераключальнік іх. 

DAVID малая: Пераключальнік іх. І тое, што цябе клічуць? 

JACOB: Якаў. DAVID малая: Якаў, рухацца. Значна больш эфектыўным толькі, каб мець Месцы своп Якаў з Арты, у адрозненне ад змушае ўсе чатыры з гэтых людзей, вялікі дзякуй, каб іх правільнае становішча. Што прыемна аб Арты зараз, ён у сваёй правільнай пазіцыі. Давайце зробім гэта зноў. 2, гэта найменшая колькасць, што я бачыў. 3, 7, 5. Добра. 2, безумоўна, самы маленькі. Не трэба рабіць любую працу. Давайце зробім гэта зноў. 6. Найменшы? 8. Не-а. 4? Ох. Дазвольце мне ўспомніць 4. 3. Дазвольце мне ўспомніць 3. 7, 5. Самае маленькае лік У мяне бачыў на гэтым праходзе ёсць 3. Калі вы хочаце выходзь. Куды мы ідзем, каб паставіць вас? І як цябе завуць? 

Алан: Алан. 

DAVID малая: Алан, мы прыйдзецца выселіць вас. Але што з'яўляецца больш эфектыўным, каб проста памяняць двух чалавек, чым мець некалькі чалавек на самай справе абысці больш. Зараз давайце зробім гэта зноў. Я збіраюся выбраць 4, так выходзь. А хто будзе рухацца? Нумар 8, вядома. Калі я зараз знайсці нумар 5, выходзь. Нумар 8 збіраецца атрымаць зноў высяляюць. Цяпер я збіраюся знайсці нумар 6 на месцы. 7 на месцы. 8 на месцы. 

Тое, што мы толькі што зрабілі зараз тое, што называецца выбар роду, і калі мы сабе гэта, гэта будзеце адчуваць сябе крыху па-іншаму. Давайце пойдзем далей і ад гэтага Меню тут, гэта visualization-- давайце зменім гэты to-- давай, Firefox. Давайце зменім гэта ў мой выбар роду. І давайце паскорыць яго, як і раней, і пачаць візуалізацыю цяпер. І гэты алгарытм мае іншае пачуццё да яго. На кожнай ітэрацыі, шчыра кажучы, гэта яшчэ больш простым. Я проста выбраўшы самы маленькі элемент. Цяпер, шчыра кажучы, я крыху пашанцавала, што Час, у тым, што ён сартуюцца вельмі хутка. Элементы былі выпадковымі. Гэта не так, як мы будзем у канчатковым выніку см, прынцыпова хутчэй. Але давайце паглядзім, трэці і апошні падыходзіць тут адносна таго, што адбываецца. Так што давайце ісці наперад і скінуць вас, хлопцы у апошні раз, каб быць у гэтым парадку тут. 

А цяпер, я збіраюся быць трохі больш разумным, проста каб закругліць нашы алгарытмы. Я збіраюся зрабіць гэта. Я збіраюся не ісці назад і наперад так шмат. Шчыра кажучы, я стаміўся ад усё гэта перамяшчэння. Я проста хачу, каб прыняць тое, што я дадзена ў пачатку спісу, і я збіраюся разабрацца што тады і там. І вось мы. Нумар 4. Я збіраюся ўставіць нумар 4 у адсартаваны спіс. Гатова. Я сцвярджаю, цяпер, і проста зрабіць гэта больш ясна, гэтая частка майго спісу сартуецца. Гэта свайго роду дурной прэтэнзіі, але на самой справе 4 сартуецца ў спіс памеры адной. Зараз, я збіраюся ўзяць на ліку 2. Нумар 2 я цяпер збіраюся ўставіць у патрэбным месцы. Дык дзе ж 2 належаць? Відавочна, тут. Так што наперад і вярнуцца, калі б мог. І чаму вы, хлопцы проста ўзяць Ваша музыка стаіць з вамі на гэты раз. А давайце сілком ўставіць вам ў пачатку спісу. Так трохі больш працы. Я павінен быў перамясціць Якава вакол, і як цябе завуць? 

AMIN: Амін. 

DAVID малая: Амін. Але па крайняй меры я не ісці наперад і назад. Я проста прымаць рэчы, як я іду. Я проста устаўляючы іх у патрэбным месцы. 6, гэта на самай справе даволі лёгка. Давайце ўставіць вам там, калі вы проста хацеў адсунуцца няшмат. Нумар 8, таксама даволі лёгка. Права там. Чорт вазьмі. Нумар 1 мы не можам проста памяняць з Амін тут, таму што гэта будзе сапсаваць замовы. Таму мы павінны быць трохі разумнейшы. Так, Арты, калі б вы маглі рэзервовае капіяванне на імгненне. Давайце пойдзем далей і перакласці зараз, у адрозненне ад нашых папярэдніх алгарытмаў, каб вызваліць месца для Арты прама тут у пачатку. Так, у рэшце рэшт, я збольшага рабіць тое, што я хацеў пазбегнуць раней. І так мой алгарытм з'яўляецца свайго роду з назад, інтэлектуальна, ад таго, што ён ад пачатку быў. Я проста раблю перамену у другім пункце. Цяпер я на 3. О, чорт. Мы павінны рабіць больш працы зноў. Так што давайце штурхаць вас. Давайце пяройдзем 8, 6, 4-- аб oh-- і 3 будзе ісці прама там. Так па крайняй меры невялікія зберажэнні на гэты раз. 7, не занадта шмат працы трэба будзе зрабіць. Так што калі вы хочаце, каб соваць назад, давайце уставім вас. І, нарэшце, 5, калі вам хочаце трашчаць таму, мы неабходна перанесці вас, вас, Вы, да пяці на месцы. 

Так што цяпер, каб убачыць гэта ў Высокі ўзровень графічна, давайце зробім гэты алгарытм візуалізацыі аднаго дадатковага часу. Так што гэта мы будзем называць ўстаўкі роду. Мы будзем запускаць яго як хутка, і пачаць яго тут. І гэта таксама мае розныя пачуцці. Гэта свайго роду становіцца ўсё лепш і лепш, але гэта ніколі не ідэальна пакуль я не пайсці і гладкай ў гэтых прабелаў. Таму што, зноў жа, я толькі браць тое, што Я надаецца злева направа. Так што я не так пашанцавала што ўсё было ідэальна. Вось чаму мы павінны былі гэта крыху mispositions што мы фіксаваныя ў часе. 

Такім чынам, усе гэтыя алгарытмы, здаецца, працаваць на злёгку рознымі тэмпамі. На самай справе, што б вы сказаць, лепшы або самы хуткі на дадзены момант? Bubble роду, у першую чаргу? Сартаваць Выбар, другі? Ўносяцца роду, трэці? Я чуў, некаторыя выбару гатунку. Іншыя думкі? 

Вось і атрымліваецца, што усе гэтыя алгарытмы прынцыпова гэтак жа, як эфектыўна, як кожны other-- ці, наадварот, як неэфектыўнай, так як адзін з адным, таму што мы можам зрабіць прынцыпова лепш, чым усе тры з гэтых алгарытмаў. І гэта крыху белага ляжаць таксама. калі я кажу, як эфектыўна або неэфектыўнай, што, па меншай меры для супер-вялікія значэння п. Калі ў нас ёсць ўсяго восем чалавек тут, ці, можа быць, 50 або каля таго бараў на экране, вы абсалютна заўважыць адрозненні Сярод гэтых трох алгарытмаў. Але, як п, колькасць людзей, або колькасць лічбаў, або колькасць людзей у тэлефоне Кніга, або колькасць вэб-старонак ў базе дадзеных кампаніі Google становіцца больш і больш, мы ўбачым, што ўсе тры з іх алгарытмы на самай справе вельмі дрэнна. І мы можам зрабіць прынцыпова лепш, чым гэта. 

Давайце зірнем, нарэшце, на тое, што гэтыя алгарытмы могуць пахадзіць у кантэкст некалькіх іншых а таксама шляхам гэтым візуалізацыя тут што будзе прадстаўляць нас колькасць алгарытмаў. Давайце пойдзем далей і павіншаваць нашы ўдзельнікі тут, усё з якіх сартуюцца сябе вельмі добра. Калі вы хацелі б узяць развітальны падарунак. Вы можаце захоўваць вашыя нумары, а таксама. І тое, што вы ўбачыце, ці, дакладней, чуць, зараз, з'яўляецца тое, што, як мы ставім гукі у кожным з гэтых стрыжняў і звязаць яго з праграмным забеспячэннем, адрозніваецца частата гуку, Вы можаце абгарнуць свой розум больш audioly вакол таго, што кожная з гэтых рэчаў Выглядае як. Першы з якіх з'яўляецца сартаванне ўстаўкамі 

[TONES] 

Гэта пузырьковый сартавання. 

[TONES] 

Сартаваць Выбар. 

[TONES] 

Тое, што называецца сартаванне зліццём. 

[TONES] 

Гном роду. 

[TONES] 

Вось менавіта для CS50. Мы будзем бачыць Вас у сераду. 

Апавядальнік: І зараз, "Deep Думкі ", па Daven Фарнэме. Чаму гэта для завесы? Чаму б не зрабіць яго лепш? Я б зрабіць пяць пятлю. 

[Смех]