DAVID مالان: خوب. بنابراین این CS50 است، و این است در حال حاضر آغاز هفته سه. پس تا اکنون، ما نوشتن برنامه در C که نگاه کمی چیزی شبیه به این است. بنابراین ما یک زن و شوهر از چن تیز شامل در بالای صفحه. ما اعضای هیات، اصلی، از درجه اعتبار ساقط کردم، و پس از آن به چیزی برای انجام در وسط، برخی از دستوری که داخل از آن تابع. اما کلیدی است این واقعیت است که بوده است ما شده است گفت: از درجه اعتبار ساقط است. پس از درجه اعتبار ساقط، همه از این زمان، مشخص که این برنامه، زمانی که اجرا شود، تنها می توان از طریق نام خود را اجرا کنید. شما می توانید هر گونه عبارت دیگر نوع و یا شماره بعد از نام برنامه زمانی در حال اجرا است. بنابراین، برای مثال، اگر برنامه بود وارد شده به یک فایل به نام سلام، شما می توانید از انجام ./hello، اما این است که آن. 

تنها راه که شما می توانید فراهم ورودی به این برنامه است با یک تابع. به عنوان مثال، آنچه تابع ما با استفاده از تا کنون شده است برای دریافت ورودی از کاربر؟ 

رسید دریافت رشته است. DAVID مالان: برای دریافت رشته و یا دریافت هوشمند، و یا شما دیگران را دیده ام، حتی اگر شما از آنها استفاده نشده است، مانند گرفتن دراز و کشیده و مانند آن. اما فرض کنید که ما در واقع می خواهم برای شروع نوشتن برنامه است که کمی بیشتر است همه کاره، و، رک و پوست کنده، کمی بیشتر مانند دستورات است که شما در شده است گرفتن، امیدوارم، کمی عادت کرده اند به. مانند سی دی Dropbox به فضا. این، البته، تغییرات دایرکتوری خود را، با فرض شما در خانه جان هاروارد هستید دایرکتوری، به پوشه Dropbox خود را. در همین حال، یک دستور مثل این ایجاد یک دایرکتوری جدید به نام pset2، که شما ممکن است در حال حاضر و یا به زودی برای مشکل دو مجموعه. را خوش، البته، یک فرمان است که ایجاد یک برنامه به نام سلام از یک فایل به نام سلام نقطه ج. و در هر یک از این موارد، در حال حاضر، ما تا به حال کرده ام ارائه استدلال در به اصطلاح خط فرمان، سریع چشمک می زند، به طوری که می داند چه چیزی را برای ساخت، و به همین ترتیب که می داند چه mkdir به پوشه برای ایجاد، و به طوری که سی دی می داند که در آن شما می خواهید به آن بروید. اما تا اکنون، ما در حفظ و گفت که اصلی، عملکرد، پیش فرض شما تا به بیان از درجه اعتبار ساقط در داخل از آن پرانتز، به این معنی که می توانید هر استدلال را ندارد. 

از امروز شروع چیزی است که ما قصد داریم برای انجام است، ما قصد داریم به شروع حمایت از چیزهایی مثل این حتی. در واقع، در این مورد، که به شما نمی به طور معمول به صورت دستی تایپ کنید، را انجام شده است این برای ما وجود ندارد یکی، بلکه یک، دو، سه اضافی رشته بعد از برنامه به نام صدای جرنگ جرنگ. پس چگونه این دست ما؟ 

خوب، شروع امروز، در مواردی که ما می خواهیم به ارائه ورودی از طریق به اصطلاح خط فرمان، ما در حال رفتن به شروع به اضافه کردن اینجا چه چیزی در yellow-- به جای خالی با کاما جدا کنید تعداد آنها اعضای هیات رشته ی argv براکت براکت باز نزدیک است. در حال حاضر این جالب است برای یک زن و شوهر از دلایل. یکی، آن را به ما اجازه ارسال برنامه هایی که کمی پویا تر. اما، compellingly بیشتر، آن را به باز کردن در حال حاضر صحبت به چه آرایه می تواند واقعا شود، برای چه رشته ای استفاده می شود واقعا در زیر هود، تا هفته بعد وقتی که ما شروع به غواصی در حتی عمیق تر که چگونه دستگاه است برای ساخت این کار مسائل. اما در حال حاضر، اجازه دهید قرعه کشی، شاید، یک عکس. 

هنگامی که شما نوشتن یک برنامه با اصلی اعلام کرد در این راه، به طوری که اصلی دو استدلال، یک int طول می کشد and-- چه نوع داده آرگومان دوم است؟ 

رسید آرایه. DAVID مالان: آرایه. پس از آن در نگاه اول به نظر می رسد مانند آن را رشته، اما متوجه براکت مربع است. به یاد بیاورید زمان آخرین ما معرفی مفهوم آرایه ای. و آرایه ها استفاده از براکت در چند زمینه. شما ممکن است مربع استفاده براکت برای رفتن به یک آرایه و یک عنصر خاص، مانند براکت 0 یا 1 یا براکت براکت 2. اما ما دیدیم، اگر به طور خلاصه، در هفته گذشته است که شما نیز استفاده از این براکت ها اعلام به اندازه یک آرایه، اگر شما از قبل می دانید که چگونه بسیاری از آرگومان از نوع int و یا چگونه بسیاری از رشته ها و یا هر آنچه که شما در واقع می خواهم. پس از آن که معلوم وجود دارد زمینه سوم اینجا است که هیچ عدد داخل از براکت مربع است. هنگامی که شما را مشخص، به عنوان من در اینجا، به نام چیزی شبیه به argv را، که فقط یک راه فانتزی است گفت: بردار استدلال، که یکی دیگر از راه فانتزی است گفت: مجموعه ای از استدلال، براکت براکت باز نزدیک فقط بدان معنی است که شما لزوما نمی در پیشبرد دانم چقدر بزرگ آرایه است برای رفتن به، اما شما می دانید آن را به یک آرایه. بنابراین اگر شما نمی دانید تعداد آن را در وجود دارد قرار داده است، برای براکت براکت باز نزدیک بدان معنی است که argv را یک رشته نیست، اما آرایه ای از رشته ها. بنابراین قواعد، اگر شما فکر می کنم در هفته گذشته، آن را بسیار شبیه به گفت چیزی شبیه اعضای هیات سنین براکت باز، و پس از آن چیزی پس از آن. این ها به چه شکلی است؟ اجازه دهید در واقع یک عکس رسم. بنابراین، هنگامی که این برنامه را با بخش اصلی اجرا می کنید با دو آرگومان در داخل تعریف از این پرانتز، شما در اصل حداقل دو تکه از حافظه تحویل به شما در زیر هود. یکی، به عنوان من به عنوان تساوی این مستطیل، است که به آن می شود تعداد آنها. و فقط به عنوان یک روکش سریع، چه نوع داده از تعداد آنها است؟ پس از آن اعضای هیات است. بنابراین تعداد در جریان است به در نوبت argc-- که برای شمارش استدلال است. در همین حال، I argv را به عنوان یک آرایه رسم کرده ایم. و من نمی دانم چه مدت طول می خواهد، بنابراین برای مقاصد امروز نقطه نقطه نقطه. ممکن است از برخی از طول دریافت کنید. اما من در اینجا در تصویر ام حداقل چهار مستطیل. بنابراین argv را یک تکه از حافظه است که فروشگاه ها رشته رشته رشته نقطه نقطه نقطه، و تعداد آنها فقط یک تکه است حافظه برای یک عدد صحیح. 

بنابراین در حال حاضر، اجازه دهید که کمی دقیق تر. اگر، زمانی که من رشته دارند در این آرایه، به نام argv را، من می خواهم به آنها را دریافت کنید به صورت جداگانه، درست مثل هفته گذشته، ما در حال رفتن به استفاده از نماد مثل ی argv براکت 0 برای دریافت اولین چیزی که یک آرایه. argv را پایه 1 برای دریافت نکته دوم، و غیره. کلید کار اینجا این است که ما هنوز هستیم 0 indexed-- ما هنوز از 0 شمارش. بنابراین در حال حاضر در اجازه در واقع قرار دادن چیزی در این. اگر من به کامپایل یک برنامه به نام سلام از یک فایل به نام سلام نقطه ج، و پس از آن من است که برنامه را اجرا کنید با نقطه بریده بریده سلام، چه کامپیوتر، لپ تاپ من من، مانند زیر کاپوت نگاه لحظه ای من را اجرا نقطه بریده بریده سلام و آمار را وارد کنید؟ خوب، این است که شاید آنچه که ما می تواند توصیف به عنوان محتوای کامپیوتر شما حافظه و یا حافظه دسترسی تصادفی RAM--. به عبارت دیگر، کامپیوتر، به نحوی برای شما جادویی، قرار می دهد تعداد 1 در تعداد آنها، argcount AKA، و آن را به معنای واقعی کلمه در رشته ./hello در argv براکت 0. من هیچ نظری ندارم، رک و پوست کنده، چه در براکت argv را 1 یا 2 یا 3، چرا که اگر کاربر تا نه هر چیزی علاوه بر ./hello تایپ شده، ما قصد داریم که فرض کنیم که این ارزش زباله به احتمال زیاد هستند، پس به صحبت می کنند. این تکه از حافظه وجود داشته باشد، اما آن را به ما نیست در نگاه به آنها، به دلیل argcount فقط یکی است. 

در حال حاضر، در عین حال، اگر من ارسال اجرا یک برنامه دیگر، سی دی است که به درستی بیش از یک دستور، در چشمک زدن فضای سی دی prompt-- شما Dropbox-- زمانی که من اجرا که، به طور موثر، زمانی که برنامه سی دی اجرا می شود، تعداد آنها، در داخل حافظه کامپیوتر من است، برای بیشترین خلاصه دوم عدد 2. و پس از آن argv را درجه براکت است سی دی، argv را براکت 1 تا Dropbox به، و پس از آن البته از دستور کامل، به طوری که همه از این حافظه اساسا از بین می رود و برای چیز دیگری استفاده می شود. و به همین دلیل من می گویم فقط یک لحظه. 

در همین حال، اگر ما pset2 mkdir به، تصویر به نظر می رسد تقریبا یکسان است، اما با رشته های مختلف در داخل argv را. اگر من فاصله صدا کردن سلام سلام نقطه ج، همان ایده. مسائل بیشتر در جهت پر argv را، و تعداد آنها، البته، 4 است. بنابراین به عبارت دیگر، حتی اگر این آرایه ممکن است نقطه نقطه نقطه، برخی از با طول متغیر، پس به صحبت می کنند، شما همیشه می دانم که در آن پایان آن است، چرا که تعداد آنها در حال رفتن به شما بگویم در چه نقطه شما را متوقف به دنبال عناصر در argv. شما فقط می توانید در چهار نگاه در کل در این مورد. 

بنابراین اجازه دهید اکنون نگاهی، شاید، یک برنامه ساده است. یکی که فقط می گوید: سلام به کسی مثل Zamyla. پس من ادعا می کنند من قصد دارم به نوشتن یک برنامه در یک لحظه از طریق که من می تواند انجام دهد ./hello فضای Zamyla، و پس از آن من می خواهم برنامه های من برای چاپ کردن چیزی فوق العاده ساده مانند "سلام، Zamyla." در حال حاضر در گذشته ما getstring استفاده می شود. بنابراین در گذشته، حتی اگر شما تازه به برنامه نویسی هستید، شانس هستند شما می توانید تا شلاق زدن برنامه ای است که با استفاده از getstring و سپس با استفاده از تابع () printf سلام به Zamyla. اما اجازه دهید getstring این زمان استفاده کنید. اجازه بدهید من به جای به Appliant به و شامل استاندارد نقطه I O ساعت. اجازه بدهید همچنین شامل CS50 نقطه در ساعت. در حال حاضر اعضای هیات اصلی، و در حال حاضر من رفتن به انجام امروز از درجه اعتبار ساقط. در عوض، من قصد دارم به انجام تعداد آنها اعضای هیات ی argv رشته براکت براکت باز نزدیک، تعیین یک عدد است. و در حال حاضر در اینجا من به اصطلاح انجام دهد. چیزی که من قصد دارم انجام دهم، من هستم رفتن به انجام یک کمی از کبیسه از ایمان، من قصد دارم که فرض کنیم که کاربر قصد استفاده از این برنامه به درستی، و من به سادگی رفتن به انجام تابع () printf سلام،٪ برف. بنابراین هیچ چیز جدیدی وجود دارد. اما من می خواهم به حال هر کلمه را نوع کاربر بعد از نام برنامه است. بنابراین اگر من ./hello فضای Zamyla، I می خواهم به نحوی برنامه نویسی دسترسی نقل قول نقل قول را تمام کردن "Zamyla." بنابراین من می توانید به بردار استدلال من، آرایه من از رشته، و اگر فرمان، دوباره، ./hello فضای Zamyla بود، چه تعداد می خواهم در argv را قرار داده که اینجا هستید؟ رسید: 1. DAVID مالان: 1، به دلیل براکت 0 می رسد در حال رفتن به نام برنامه، که ما دیدم. بنابراین براکت 1 اولین کلمه است که من، کاربر، تایپ کرده اند. من قصد دارم به جلو بروید و صرفه جویی در این. من قصد دارم برای رفتن به پوشه من که در آن من این فایل قرار داده شده است. من قصد دارم به انجام را سلام 3. OK جربان IO است. ./hello Zamyla را وارد کنید. چیزی که من اشتباه انجام دهید؟ من شگفت زده گرفتار شد خودم را برای فقط یک لحظه وجود دارد. چیزی که من اشتباه انجام دهید؟ 

رسید نام. 

DAVID مالان: فایل در واقع hello3.c نامیده می شود. و من که فقط برای قوام، چرا که ما کرده ایم حال hello.c در گذشته در کد آنلاین. بنابراین اجازه دهید حل این ./hello براکت فاصله 3 Zamyla. را وارد کنید. و در حال حاضر ما سلام، Zamyla. در همین حال، من می توانم این را تغییر دهید است راب، و یا واقعا هر کلمه دیگر. 

اما اجازه دهید در مورد گوشه ای در نظر بگیرند. چه شما انتظار می رود ممکن است در صورت اتفاق خواهد افتاد من نام کسی را تایپ کنید و در همه؟ 

رسید خطا. 

DAVID مالان: یک خطا نوعی، شاید. بیایید ببینید. را وارد کنید. صفر. بنابراین تابع () printf است که در واقع بودن کمی محافظ از ما در اینجا، و به معنای واقعی کلمه چاپ پرانتز باز تهی، اما همه چیز حتی بدتر می تواند رخ دهد. و فقط برای نشان دادن چیزی است که شما کاملا باید انجام دهید، چه در رفتن در اینجا و شروع مجبور باشید. درست است؟ اگر من می دانم که تصویر در حافظه اساسا این، ی argv براکت 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. OK. در حال حاضر برخی از شما وجود دارد ممکن است، یک لامپ خارج شدن. چگونه بسیاری از شما مشاهده این ارسال قبل از؟ OK. پس چرا؟ 

شانس are-- و متفاوت وجود دارد چیزهایی که می توانند از این شود، و به وضوح شما را در خوب است company-- ما به وضوح باعث آنچه به نام گسل تقسیم بندی. و داستان کوتاه مدت برای امروز، من بخشی از حافظه را لمس کرده اند که من باید ندارد. که در آن یک بخش فقط بدان معناست یک تکه از حافظه که باید ندارد. حالا کامپیوتر را تضمین می کند که اگر من اجرا ./helloZamyla که من می توانم argv را لمس شود براکت 0 و argv را براکت 1. اما تعداد آنها است ارزش 2، که به معنی من هستم تنها allowed-- این نوع افتخار system-- به لمس براکت 0 و براکت 1. اگر من به هر دورتر، وجود دارد کاملا برای رفتن به حافظه وجود دارد. RAM من از لحاظ جسمی وجود دارد در کامپیوتر است. اما چه کسی می داند چه چیزی وجود دارد؟ در واقع، من در حال اجرا های متعدد برنامه در یک زمان. من ممکن است seen-- اگر من نبود انجام این کار در Appliant اما در مک و یا PC-- من ممکن است مشاهده محتویات یک ایمیل به. من ممکن است دیده می شود یک لحظه پیام من به تازگی ارسال کرده اید. هر چیزی که ممکن است پرسه بزنند در حافظه می تواند از طریق دیده شده است این نماد براکت های دلخواه. یا، بدتر، شما ممکن است یافت یکی از کلمات عبور من که من به تازگی می خواهم در تایپ شده، که برنامه در حافظه ذخیره شده بود تا به عنوان به من تصدیق، و پس از آن فقط نوع آن را ترک در RAM تا زمانی که من آن برنامه را ترک کنید. 

و در واقع، این یکی از است خطر و قدرت استفاده از یک زبان مانند C. شما دسترسی نامحدود به محتویات حافظه برنامه، و چه بچه ها بد می تواند حتی در آن cases-- انجام به ویژه هنگامی که ما به برنامه نویسی تحت وب در پایان ترم، ما بازنگری این topic-- است بهم زدن در اطراف، به طور بالقوه، کسی است کامپیوتر حافظه و پیدا کردن چنین چیزهایی کنجکاو همانطور که ما در آنجا دیدم. و یا حتی بدتر از آن، کلمات عبور که او یا او پس از آن می توانید استفاده کنید به انجام کارهای بد است. 

بنابراین به وضوح من باید این کار را نکردند، چرا که همه چیز عجیب و غریب شروع به اتفاق می افتد. در واقع، این یک توفنده برنامه است. این معادل از سیستم عامل مک و یا در ویندوز پنجره برنامه فقط ناپدید می شود. یک خطای غیر منتظره رخ داده است. در محیط خط فرمان ما چیزی شبیه به این را مشاهده کنید. اما به همین دلیل است که من به سادگی لمس کردن حافظه که به من تعلق ندارد. 

بنابراین اجازه دهید در برابر این دفاع کمی در راه های مختلف با نگاه کردن به این برنامه است. پس، دوباره، اسکلت که ما دیدم earlier-- و من این بار اعضای هیات هایلایت شده است. و در تمام این زمان اصلی در واقع بازگشت به یک مقدار. اگر چه در بسیاری از سخنرانی ما نمونه ما یک بار هرگز استفاده می شود بازگشت هر چیزی در اصلی. ما فقط ارسال تابع () printf نزدیک آکولاد و آن. اما به صورت رایگان، چه کامپایلر است را برای شما انجام می دهند، به طور موثر، است بازگشت 0 برای شما. تبدیل out-- و آن را کمی counterintuitive-- که 0 خوب است. این به این معنا نیست نادرست در هر سه. 0 خوب است، و هر غیر 0 ارزش، جهان تصمیم گرفته است، می تواند خطا نشان. بنابراین اگر شما همیشه آشفته ام چیزی بر روی کامپیوتر شما، و یا یک برنامه به تازگی بر شما مرد و شما برخی از پنجره نادرست بدست بر روی صفحه نمایش خود را، گفت خطا منفی 49 یا خطا 23-- برخی از value-- به ظاهر خودسرانه است که چرا که یک برنامه نویس است سخت رمزی ارزش مانند منفی 49 یا مثبت 23 برای نمایش هر تعداد، به جرات می گفت، از 4 میلیارد همه چیز امکان پذیر است که ممکن است به اشتباه در یک برنامه است. 

پس چگونه ممکن است من را استفاده از این خودم؟ خوب، اجازه دهید باز کردن یک برنامه که من در پیش نوشت، و بهم زدن در اطراف آنلاین به نام سلام 4. و این تقریبا یکسان است، با این تفاوت که کمی از خطا رس کردم آن است. در این مورد، من دوباره اعلام کرده ام اصلی به عنوان مصرف دو آرگومان، اما این بار، در خط 17، آگهی من انجام یک بیت از یک بررسی سلامت عقل. من مطمئن شوید که تعداد آنها برابر برابر 2. از آنجا که اگر از آن است، که یعنی من با خیال راحت می توانید لمس نه تنها براکت 0، اما براکت 1. و من به جلو و چاپ، در این مورد، Zamyla و یا راب و یا هر کلمه ای که تایپ کردن. و در حال حاضر فقط برای گرفتن کمی مناسب تر است، من قصد دارم به صراحت بازگشت 0 به معنی همه خوب است. هیچ چیز بد اتفاق افتاده است. 

اما طبق قرارداد، من قصد دارم به بازگشت 1، و یا رک و پوست کنده هر گونه 0 غیر ارزش، اگر چیزی را اشتباه رفت. در حال حاضر کاربر به رفتن نیست واقعا متوجه چه خبر است. در واقع اگر من به این شاخه بروید، ما در بزرگنمایی و ایجاد سلام 4، ./hello-4 Zamyla رفتار به عنوان من انتظار دارم. اما اگر من به جای انجام تایپ کنید هر چیزی، هیچ چیز به نظر می رسد اتفاق می افتد، اما آن را نشانی از سقوط نیست. و اگر من به جای انجام کاری مانند راب ناظر است در به اشتراک گذاری Thayer-- اطلاعات دلخواه. اما توجه، argv را 1، 2، 3، 4، و 5 در حال حاضر باید در حافظه وجود داشته باشد. این، بیش از حد است، و نه آنچه برنامه من انتظار دارد، چون من که آیا بررسی کرده تعداد آنها برابر برابر 2 یا نه. بنابراین من در حال حاضر در مقابل این دفاع. 

در حال حاضر، به عنوان یک به کنار، ما programmer-- و یا به جای ما users-- هرگز دید که 0 یا 1 است اما با استفاده از یک ابزاری به نام دیباگر، و یا ابزارهای دیگر، به عنوان ما قبل از دیدن طولانی، شما برنامه نویس در واقع می توانید ببینید چه ممکن است اشتباه رفتن در داخل برنامه شما. 

بنابراین، هر گونه سوال در تعداد آنها؟ آره. 

رسید من دیده ام که در آن آنها اند شخصیت نداشته است، [نامفهوم] فقط گفت: ستاره رشته د، مانند شخصیت کاما از هم ستاره. آیا آنها معادل اینجا؟ 

DAVID مالان: آنها می باشد. بنابراین سوال این است، شما باید برنامه های گاه به گاه دیده می شود مثل این که نمی کنند می گویند براکت ی argv رشته اما در عوض چیزی می گویند مثل کاراکتر براکت ی argv ستاره. و حتی دیگر وجود دارد انواع که شما ممکن است ببینید. آنها در واقع معادل. در حال حاضر، ما باید این مرتب کردن بر اساس چرخ آموزش در به شکل رشته در CS50 کتابخانه، اما در کمی بیش از یک هفته و یا پس ما قصد داریم به حذف آن انسداد در دسترس نباشد و در واقع در چه کاراکتر و ستاره نگاه هستند، و چگونه آن مربوط به حافظه نمایندگی به طور کلی. بنابراین ما به آن می آیند. 

سوالات دیگر در argv را و یا تعداد آنها ما؟ آره. رسید چرا آن را بازگشت به خطا [نامفهوم]؟ DAVID مالان: چرا این کار را کرد بازگشت خطا only-- آه! در مورد قبلی، زمانی که ما در اطراف با حافظه futzing شد، به همین دلیل آن را تنها یک خطا بازگشت زمانی که من واقعا تایپ یک عدد بزرگ؟ پاسخ کوتاه این است، ما فقط خوش شانس. به طور کلی، یک کامپیوتر حافظه را اختصاص به تکه های، و آن را به من داد یک تکه به اندازه کافی بزرگ است که من دور شد، بدون اینکه متوجه شده، از براکت لمس 2، براکت 3، براکت 50، اما به محض این که من تحت فشار قرار دادند شانس من، من فراتر رفت مرزهای تکه از حافظه سیستم عامل من داده بود. و این زمانی که آن را پایین نگه داشته و گفت: هیچ. خطای تقسیم بندی. آره. 

رسید چگونه کامپیوتر که ارزش تعداد آنها؟ 

DAVID مالان: چگونه کامپیوتر که ارزش تعداد آنها؟ هنگامی که یک برنامه را اجرا می کنید، که برنامه، طبیعت از سریع چشمک می زند، است دست آرایه ای از کلماتی را که تایپ شد در اعلان، که بود در اعلان تایپ. و پس از آن عامل شما است سیستم که در اصل پر بحث های اصلی را برای شما. به طوری که یکی از خدمات است که شما، نوع مخفیانه در زیر هود از یک سیستم عامل. سوالات دیگر؟ آره. 

رسید چه معنی روگرفت هسته؟ DAVID مالان: چه معنی روگرفت هسته؟ به طوری که سوال خوبی است. و اجازه دهید من به بازگشت به این شاخه اینجا. و شما متوجه خواهید شد که من یک فایل جدید وجود دارد. این در واقع به نام هسته، و آن را در واقع به طور معمول یک فایل مناسب و معقول به اندازه. این است که اساسا یک تصویر کلی از محتویات حافظه برنامه من است و یا RAM هنگامی که آن را سقوط کرد. و این مفید باشد، به طور بالقوه، diagnostically، زمانی که ما در یک سخنرانی در آینده صحبت و بخش در مورد اشکال زدایی، زیرا شما در واقع می توانید انجام دهید معادل یک کالبد شکافی دیجیتال در آن فایل برای کمک به کشف کردن آنچه شما اشتباه در برنامه های خود را انجام داد. آره. 

رسید از: آیا تعداد آنها یک فرمان در خود را، و یا می توانید آن را نام ببرید هر چیزی؟ 

DAVID مالان: سوال خوب. آیا تعداد آنها یک دستور را در خود، و یا می توانید آن را نام ببرید هر چیزی؟ این یک دستور است قطعا نیست. این به سادگی یک متغیر را نام یا نام یک آرگومان است، و کاملا ما می تواند این مواد غذایی تماس بگیرید، ما می توانیم این نوار، که تمایل دارند تماس بگیرید به رفتن به کلمات است که یک کامپیوتر دانشمند می رود به. اما طبق قرارداد، ما از تعداد آنها و argv را. اما این فقط یک انسان است کنوانسیون، نه چیزی بیشتر. خوب. پس معلوم است، من بوده ام گفتن یک بیت از یک lie-- سفید و رک و پوست کنده، در آینده، شما خواهید دید ما شده ایم گفتن دیگر دروغ. اما در حال حاضر، ما در حال رفتن به پوست پشت یکی از این. در این مورد در اینجا وقتی که من قبلا به یک برنامه مانند ./hello یا ./hello-3 فرار Zamyla، ما تا به حال از مطالب من حافظه کامپیوتر را به دنبال تقریبا شبیه به این. اما به خاطر آنچه یک رشته است. آنچه ما می گویند یک هفته پیش چه رشته واقع در زیر هود است؟ رسید آرایه ای از کاراکتر ها. DAVID مالان: یک آرایه ای از کاراکتر ها، درست است؟ بنابراین ما ممکن است یک آرایه از رشته ها، اما، به نوبه خود، یک رشته آرایه ای از کاراکتر ها است. بنابراین اگر من واقعا می خواهم به مقعد وقتی که من این تصویر قرعه کشی، من واقعا باید طراحی شود آن را کمی بیشتر شبیه به این، به موجب آن در هر یک از این شاخص از آرایه ی argv من، یک رشته تمام شده است خود را وجود دارد که خود را در یک آرایه است. و در حال حاضر دروغ سفید ما امروز گفتن این است که تصویر را نمی کند نگاه کاملا شبیه به این. در واقع، مربع کوچک به طور معمول در خارج از مستطیل بزرگ وجود دارد. اما ما به که قبل از بلند آمده است. اما این ./hello بک اسلش 0 است، که بودن شخصیت ویژه ای است که demarcates پایان یک رشته، و ما به یکدیگر پس از چن نام Zamyla است. پس چه معنی است؟ 

خوب، اجازه دهید پیش بروید و باز کردن دو نمونه دیگر در سایت حضور دارند در دسترس است. یکی argv1.c نام و از سوی دیگر argv2 است. این یک برنامه فوق العاده ساده است که متفاوت از برنامه های گذشته است در که در حال حاضر من با استفاده از تعداد آنها و argv را در اینجا. و در حال حاضر من یکپارچه سازی با حلقه for در خط 18، از من = 0 در تا تعداد آنها. و آنچه من را به انجام با این خط از کد که اینجا هستید؟ به زبان انگلیسی. این به وضوح نشان می دهد که استفاده از تعداد آنها. اما در زبان انگلیسی، چه این کار را انجام اگر من این برنامه را اجرا کنید؟ آره؟ 

رسید این خبر را به چاپ شما هر چند بار روی صفحه نمایش به عنوان شما می خواهید. DAVID مالان: دقیقا. بنابراین هر آنچه که کلمات من نوع در اعلان، آن را رفتن به گرداندن آنها را به من در هر خط. بنابراین اجازه دهید پیش بروید و این کار را. اجازه بدهید به فهرست من و انجام را ./argv1 argv1. و در حال حاضر، اجازه دهید آن را ساده نگه دارید. اجازه دهید کاری انجام ندادن در ابتدا. این کار را کرد نسخه قابل چاپ کردن یک چیز، و که در واقع نام برنامه، چرا که در براکت 0 است. اگر من در حال حاضر می گویند مواد غذایی، آن را به انجام آن دو، و اگر من می گویم نوار مواد غذایی، این رفتن به می گویند این سه چیز است. اکنون که تا حدودی جالب توجه است، شاید. اما به یاد آورید که argv را آرایه ای از رشته ها است، اما یک رشته آرایه ای از کاراکتر است، بنابراین ما می توانیم همه چیز را یک درجه و اعمال است که پایه منطق و کد که به نظر می رسد کمی مرموز تر، مسلما. اما با داشتن تو در تو حلقه، چیزی شبیه به آنچه که شما ممکن است از ماریو یاد می آورند، به عنوان مثال، اگر شما آن را در این راه انجام داد. 

بنابراین در حال حاضر متوجه در خط 19، من دوباره شمارش استدلال من، از 0 تا بر تعداد آنها. و در حال حاضر در خط 21-- من وام گرفتن از یک ترفند از آخرین week-- من چک می کنم آنچه که طول ی argv براکت من. من ذخیره سازی است که پاسخ در ش. و سپس من یکپارچه کردن از د در تا نفر، که در آن j است که به 0 مقدار دهی شود. بنابراین، کنوانسیون برای شمارش. هنگامی که شما من استفاده می شود، اگر شما یک حلقه تو در تو، شما می توانید من را دوباره استفاده کنید، در غیر این صورت شما لباس عروس عکس های به طور بالقوه، ارزش در خارج از حلقه داخلی. بنابراین من با استفاده از جی قرارداد. ما ممکن است K استفاده کنید. اگر شما بیش از k، شما احتمالا دارای تودرتو بیش از حد، به طور معمول. اما در حال حاضر، متوجه تابع () printf من خط کمی متفاوت است. من٪ s را چاپ کنید، من هستم چاپ٪ ج، که، البته، یک حفره یا سوراخ برای یک کاراکتر است. 

و در حال حاضر متوجه این نحو. جدید. ما آن را قبل از دیده می شود. اما منطقی، این حالت فقط بدان معناست دریافت رشته i ام در argv و j ام چه؟ رسید شخصیت. DAVID مالان: شخصیت در آن رشته است. بنابراین با استفاده از براکت پس از براکت مربع، این غواصی برای اولین بار است به رشته ی argv را، و پس از آن دوم براکت با د غواصی را به کاراکتر است که رشته خاص در argv. و پس از آن، فقط برای اندازه گیری خوبی، من چاپ یک خط جدید در اینجا. بنابراین در حال حاضر اجازه دهید من به جلو و باز کردن تا یک پنجره کمی بزرگتر بنابراین ما می توانیم این را در عمل ببینید. اجازه بدهید من به آن پوشه بروید. و در حال حاضر را argv را، 2-- whoops-- ی argv-2، ./argv 2. را وارد کنید. و این سخت کمی به عنوان خوانده شده را به صورت عمودی، اما این در واقع نام برنامه، به دنبال یک خط خالی. حالا اجازه دهید من به جلو و انجام تولی. به طور مشابه سخت به خواندن، اما آن را در واقع چاپ یک کاراکتر در هر خط. و اگر من انجام نوار، آن را در حال حاضر چاپ آن خط به خط. بنابراین غذای آماده در اینجا بسیار نیست که، عجب، در این ترفند جدید شسته و رفته نگاه که در آن شما می توانید در محتویات دریافت از شخصیت های خاص یک آرایه را، بلکه چگونه ما در حال گرفتن این پایه ایده های مانند نمایه سازی را به یک آرایه، و سپس نمایه سازی را به آرایه است که در آن مجموعه ای بود، و فقط با استفاده از ایده های مشابه به نمونه های کمی پیچیده تر. اما اصول اولیه واقعا نمی تغییر، حتی از هفته گذشته است. 

در حال حاضر این است مرتب سازی بر اساس به موقع، در آن، به یاد می آورند، در هفته صفر ما با یک دفترچه تلفن مثل این بازی. و حتی اگر این واضح است که قطعات فیزیکی کاغذ، شما می توانید نوع از فکر می کنم کتاب تلفن را به عنوان یک آرایه. بدیهی است، اگر شما به reimplement این قطعه این تکه های کاغذ در یک کامپیوتر، احتمالا شما که چیزی استفاده مانند یک آرایه برای ذخیره تمام از آن نام ها و شماره ها از تمام راه از طریق Z. پس این خوب است، چرا که به ما اجازه می دهد تا یک فرصت، شاید، به نظر شما چگونه می ممکن است در واقع چیزی شبیه به آن اجرا می کنند. همانطور که با یک سری از درب اینجا. بنابراین اگر من could-- ما نیاز به یک داوطلب در آمده است. بیایید ببینید. چهره نا آشنا شاید، چهره نا آشنا شاید. چگونه در مورد به رنگ نارنجی؟ در اینجا. پیراهن نارنجی، در آمده است. 

اجازه دهید پیش رو در حال حاضر و حرکت به این درب به سمت، حرکت این ها را از راه را برای یک لحظه. نام شما چیست؟ 

آجی: 

DAVID مالان: آجی. دیوید. از ملاقات شما خوشبختم. خوب. بنابراین ما در پشت این شش درب دیجیتالی در screen-- یا، نه، هفت درب در screen-- یک دسته کامل از اعداد. و من به شما چیزی گفته ام در advance-- توافق؟ آجی: هیچ چیز در پیش است. DAVID مالان: همه من می خواهم شما را به انجام در حال حاضر این است که برای پیدا کردن من، و برای ما، در واقع، تعداد 50، یک گام در یک زمان. 

آجی: شماره 50؟ 

DAVID مالان: تعداد 50. و شما می توانید نشان می دهد چه در پشت هر یک از این درب به سادگی با دست زدن به آن را با یک انگشت. لعنتی. [خنده] 

[تشویق حضار] 

خیلی خوب انجام می شود. OK. ما یک هدیه دوست داشتنی جایزه برای شما در اینجا. انتخاب شما از فیلم ما در هفته گذشته بحث شده است. 

آجی: آه، مرد. آه، من هرگز Spaceballs دیده می شود. 

DAVID مالان: Spaceballs. خوب. بنابراین فقط یک لحظه نگه دارید. How-- اجازه دهید این را moment-- قابل تعلیم چگونه شما در مورد رفتن پیدا کردن تعداد 50؟ آجی: من به صورت تصادفی انتخاب کرد. DAVID مالان: پس شما انتخاب به صورت تصادفی و خوش شانس. آجی: بله. DAVID مالان: OK. عالی. بنابراین در حال حاضر، شما تا به حال نمی بدست خوش شانس، چه چیز دیگری ممکن است در پشت این درب اتفاقی افتاد؟ بنابراین اگر من به جلو و این اعداد نشان می دهد در اینجا، آنها در واقع به طور تصادفی می باشد. و بهترین شما می تواند داشته باشد انجام می شود، رک و پوست کنده است، توسط، در نهایت، در بدترین حالت، چک کردن همه آنها را. پس شما فوق العاده خوش شانس، که چیزی است که ما می خواهم یک الگوریتم تماس بگیرید. بله، تبریک. اما در حال حاضر طنز let's-- من، اگر شما می توانید. اجازه دهید به این تب اینجا بروید. و در اینجا اعداد در وضوح می آنچه به نظر می رسد به صورت تصادفی، و آنها بودند. اما در حال حاضر اگر من به جای ادعا که در پشت این درب عددی که طبقه بندی شده اند می باشد. هدف در حال حاضر به هم یافتن ما تعداد 50. اما این کار را انجام الگوریتمی، و به ما بگویید که چگونه شما در حال رفتن در مورد آن. و اگر شما آن را پیدا کنید، شما این فیلم را نگه دارید. شما را پیدا کند آن، شما آن را به عقب. آجی: من می خواهم برای بررسی به پایان می رسد برای اولین بار، برای تعیین اینکه آیا there's-- [خنده و تشویق] DAVID مالان: در اینجا شما بروید. بیایید نگاهی به یک از پیشینیان آجی را، شان که قرار بود کاملا به عنوان خوش شانس نیست. OK، بنابراین وظیفه خود را در اینجا، شان، به شرح زیر است. من در پشت این پنهان درب عدد هفت، اما دور در برخی از این درب جمع و همچنین سایر اعداد غیر منفی است. و هدف شما این است به این فکر می کنم ردیف بالا از اعداد فقط به عنوان یک آرایه. ما فقط دنباله ای از قطعات هستید کاغذ با شماره های پشت سر آنها. و هدف شما این است، تنها با استفاده از بالا آرایه در اینجا، من تعداد هفت پیدا کنید. و ما پس از آن رفتن به نقد چگونه شما در مورد انجام آن است. یافتن ما عدد هفت، لطفا. شماره 5، 19، 13. این یک سوال ترفند نیست. 1. در این مرحله نمره خود را بسیار نمی خوب، بنابراین شما نیز ممکن است ادامه دهم. 3. برو. صادقانه بگویم، من نمی تواند کمک کند اما تعجب آنچه را که شما حتی فکر کردن در مورد. 

SEAN: من می توانم تنها از ردیف بالا است. DAVID مالان: فقط ردیف بالا. پس از سه سمت چپ شما رو. بنابراین من 7 پیدا کنید. 

[رسید فریاد توصیه] بنابراین هر دو از آن شگفت انگیز بود به دلایل بسیار متفاوت است. پس این است که در آن ما به سمت چپ خاموش یک لحظه پیش، و بینش کلیدی در اینجا شد این درب اعداد به حال پشت سر آنها است که، طبقه بندی شده اند شد ایده آل غذای آماده است که برای آن که شما می توانید انجام اساسا در بهتر این example-- دوم و، در واقع، که بود شان را اولین تلاش با اعداد تصادفی فقط به عنوان before-- اما به محض عنوان این شماره ها طبقه بندی شده اند، بسیار شبیه به دفترچه تلفن، چه می تواند شما را به وضوح انجام دهید؟ یا چگونه می تواند به شما اهرم که دانش؟ آره. 

رسید شما در نیمه راه به [نامفهوم]. DAVID مالان: آره. دقیقا. بنابراین غریزه اولیه آجی بود برای بررسی به پایان می رسد، که من به یاد می آورند، و پس از آن ما به نوعی به پایان رسید به عنوان مثال به سرعت. اما اگر ما شروع به انجام این کار بیش متد در امتداد آن خطوط، اما با شروع شاید در وسط، چرا که آنها در حال طبقه بندی شده اند، به محض آشکار شماره 16، بنابراین ما know-- و اجازه دهید دقیقا that-- ما بنابراین می دانیم که 50، در مورد امروز، کردم تا به حق باشد. بنابراین درست مانند در هفته صفر ما دفترچه تلفن در نیمه پاره و نیمی از پرتاب کرد مشکل دور، همان ایده است. ما می توانیم این نیمه پرتاب از مشکل دور. و احتمالا چیزی است که شما ممکن است الگوریتمی را انجام دهید، هنگامی که شما می دانید که 50 باید در سمت راست، اگر آن را در هر نقطه، است سعی کنید وجود دارد، در وسط از درب باقی مانده است. البته، 50 بالاتر است از 42 است، بنابراین ما می توانیم پرتاب این باقی مانده چهارم از مشکل دور، و، در نهایت، شناسایی چیزی شبیه به 50. اما همانطور که با دفترچه تلفن، این شماره به ما در حال حاضر در داده شد مرتب، که ما را با سوال، چگونه شما انجام دهد کارها را به منظور طبقه بندی شده اند؟ و، رک و پوست کنده، به چه هزینه؟ این یک چیز به تحویل دفترچه تلفن و پس از آن تحت تاثیر قرار دادن دوستان خود را با پیدا کردن شماره تلفن واقعا به سرعت، درست است؟ پاره کردن 32 صفحه از برای پیدا کردن یک فرد از 4 میلیارد صفحه، ما گفت: یکی از نمونه های شدید بود. اما چقدر وقت طول کشید ورایزون به مرتب سازی آن کتاب تلفن؟ چه مدت آن ما را به برای مرتب کردن این هفت عدد؟ این سوالی است که ما انجام داده ایم را تا کنون به طور کامل استفاده کنه. 

بنابراین اجازه دهید در حال حاضر این پرسش پاسخ دهد. و ما در حال حاضر همه از فیلم است، اما ما مجبور برخی از توپ های استرس. اگر، می گویند، هشت داوطلب به ما نمی ذهن پیوستن به اینجا؟ اجازه دهید به پیش بروید و انجام دهید، چگونه در مورد چهار نفر از شما، سه نفر از شما که اینجا هستید؟ دریافت برخی از چهره های جدید. و چهار نفر از شما وجود دارد؟ و now-- اجازه دهید تعصب نمی here-- و شماره هشت در اینجا در پایان. بیا تا. خوب. بنابراین آنچه که در اینجا برای هر یک از شما یک عدد است. اگر شما می خواهم به پیش رو، از این تعداد. نام شما چیست؟ 

آرتی: آرتی. 

DAVID مالان: آرتی، درست است. شما تعداد 1 است. 

AMIN: امین. DAVID مالان: امین. دیوید. شما شماره 2 است. و جلو بروید، به عنوان I دست شما ورق کاغذ، خط خود را در مقابل موسیقی در همان جهت به عنوان وجود دارد است. 

ANDY: سلام، اندی. 

DAVID مالان: اندی، آن را به خوبی به شما را ببینید. شماره 3. 

JACOB: یعقوب. 

DAVID مالان: یعقوب، شماره 4. روی خوش آمدید. GRANT: گرانت. DAVID مالان: گرانت. شماره 5. 

ALANNA: Alanna. 

DAVID مالان: Alanna، شماره 6. 

فرانسیس: فرانسیس. DAVID مالان: فرانسیس، شماره 7. و؟ 

RACHEL: راشل. 

DAVID مالان: راشل، شماره 8. خوب. برو جلو و دریافت خود را در این جهت. به من اجازه دهید قرار دادن یک باقی مانده موسیقی ایستاده در محل. از کجا شما نیاز به یک موضع؟ OK. برو جلو و فقط با قرار دادن شماره های خود را که در آن مخاطبان می توانید آنها را در دیدن، موسیقی ایستاده رو به بیرون. و امیدوارم، اول ما بررسی سلامت عقل here-- 4، 2، 6. اوه اوه. یک دقیقه صبر کنید. ما 8 ندارد. من نیاز به شما اخراج از به عنوان مثال به نحوی. شماره نه، این OK. بیایید ببینید. ما می توانیم این کار را انجام. پایه های. حالا شد. درست است. خوب. بنابراین، در حال حاضر ما 8، 1، 3، 7 5. OK. عالی. 

بنابراین سوال در دست است، در چه هزینه و از طریق چه روش، ما می توانیم در واقع مرتب سازی بر اساس این اعداد در اینجا به طوری که ما به نوعی می تواند به عقب کار می کنند، در نهایت، و decide-- آن است که واقعا قابل توجه است، آن را واقعا کارآمد، که من می توانم تقسیم و تسخیر یک دفترچه تلفن؟ آیا واقعا کارآمد است که من می توانم تقسیم و تسخیر آن تکه های دیجیتال کاغذ در هیئت مدیره، شاید اگر آن را به ما هزینه ثروت در زمان و یا چرخه انرژی یا CPU در واقع داده های ما به برخی از مرتب؟ بنابراین اجازه دهید که سوال بپرسید. 

پس اول از همه، این تعداد به در صورت تصادفی بسیار زیاد است، و من قصد دارم به پیشنهاد یک الگوریتم، و یا فرآیند که از طریق آن ما می توانیم این دوستان مرتب سازی بر اساس. من قصد دارم به روش این بسیار ساده لوحانه. و من قصد دارم به رسمیت شناختن که این نوع از تعداد زیادی برای من به نظر من قرار دادن در اطراف اطلاعات کل مجموعه در یک بار. اما شما می دانید چه؟ من قصد دارم به برخی از رفع بسیار ساده حاشیه ای. 4 و 2 از نظم، اگر هدف این است که برای رفتن از 1 تا 8. بنابراین شما می دانید چه؟ من قصد دارم به شما بچه ها مبادله، اگر شما تغییر دهید از لحاظ جسمی و مواضع قطعات خود را از مقاله است. در حال حاضر 4 و 6، این به منظور می باشد. من قصد دارم به ترک آن باشد. 6 و 8، کسانی که به منظور می باشد. رفتن به ترک آنها باشد. 8 AND1، خارج از دستور. اگر شما دو نمی خواهد ذهن مبادله. در حال حاضر 8 و 3، اگر شما بچه ها می تواند مبادله. 8 و 7، اگر شما بچه ها می تواند مبادله. و 8 و 5، اگر شما بچه ها می تواند مبادله. 

در حال حاضر، من انجام می شود؟ نه، بدیهی نیست. اما من را ساخته اند وضعیت بهتر است، درست است؟ نام و نام خانوادگی خود را دوباره چه بود، تعداد 8؟ 

RACHEL: راشل. DAVID مالان: بنابراین راشل به طور موثر حباب تا خیلی دور، تمام راه را به پایان آرایه من از اعداد است. و به طوری که مشکل این است که نوع حل شده است. در حال حاضر، به وضوح، 2 هنوز هم نیاز به حرکت کمی، و 4 و 6 و 1. اما من به نظر می رسد شده اند کمی به راه حل نزدیک تر است. بنابراین اجازه دهید این همان اعمال اکتشافی ساده و بی تکلف است. 2 و 4، OK. 4 و 6، OK. 6 و 1، میلی متر میلی متر. اجازه دهید مبادله. 6 و 3، میلی متر میلی متر. اجازه دهید مبادله. 6 و 7 OK است. 7 و 5، جواب منفی. اجازه دهید مبادله. و در حال حاضر 7 و 8. و چه نام خود را دوباره چیست؟ فرانسیس: فرانسیس. DAVID مالان: فرانسیس. بنابراین در حال حاضر فرانسیس در حتی یک بهتر است موقعیت، چون در حال حاضر 7 و 8 به درستی تا بالای حباب. پس از 2 و 4، OK. 4 و 1، مبادله اجازه. 4 و 3، مبادله اجازه. 4 و 6، شما OK کنید. 6 و 5، مبادله اجازه. و در حال حاضر آن بچه ها خوب است. ما تقریبا وجود دارد. 2 و 1، از منظور، پس از مبادله. و در حال حاضر اجازه دهید من می توانم در یک بررسی سلامت عقل. 2 و 3، 3 و 4، 4 و 5، 5 و 6، 6 و 7 و 8. OK، بنابراین ما در حال انجام می شود. 

اما در چه هزینه کردم مرتب سازی بر اساس این اعداد که اینجا هستید؟ خوب، چگونه بسیاری از مراحل من به طور بالقوه را وقتی که مرتب سازی این مردمی؟ خب، ما به این سوال می آیند. اما، رک و پوست کنده، اگر شما کردم کمی بی حوصله، که نوع آشکار در که این نبود شاید الگوریتم کارآمد ترین. و در واقع، رک و پوست کنده، من عرق کردن همه بیشتر راه رفتن به عقب و جلو. که احساس نمی خصوص کارآمد می باشد. بنابراین اجازه دهید چیز دیگری را امتحان کنید. اگر شما بچه ها می تواند تنظیم مجدد خودتان را به این هشت ارزش. کار خوب. 

اجازه دهید یک نگاه دیجیتالی، فقط برای یک لحظه قبل از ما چیزی را امتحان کنید دیگر، در چه اتفاقی افتاده. تا اینجا، شما در مورد برای دیدن هستیم تجسم از این هشت انسان به موجب آن آبی و قرمز میله نشان می دهد. بلندتر نوار، بزرگتر از تعداد. کوتاه تر از نوار، کوچکتر تعداد. و آنچه که شما در حال رفتن برای دیدن است در به صورت تصادفی بیشتر از هشت نفر از آنها. شما در حال رفتن برای دیدن این میله گرفتن توسط الگوریتم همان طبقه بندی شده اند، یا مجموعه ای از دستورالعمل ها، که ما از این پس شما تماس نوع حباب. بنابراین توجه، در هر ثانیه یا بیشتر، دو میله ها نور به رنگ قرمز، هستند که توسط کامپیوتر در مقایسه با. و سپس در صورتی که نوار بزرگ و نوار کمی از نظم، آنها هستند که برای من عوض میکنه. 

در حال حاضر این است فوق العاده خسته کننده به تماشای این، قطعا، برای مدت طولانی، اما متوجه takeaway-- میله بزرگ در حال حرکت به سمت راست، میله کمی در حال حرکت به سمت چپ. اجازه دهید این روند سقط و سرعت این تا می شود خیلی سریع تر است، بنابراین ما می توانیم حس در سطح بالا از آنچه، در واقع، مرتب سازی حبابی در حال انجام است. در واقع، آن را متلاطم تا سمت راست از لیست، و یا آرایه، میله بزرگتر است. و برعکس، میله کوچک حباب راه خود را به سمت چپ، البته در سرعت سریع تر که ما قبلا انجام داده است. بنابراین، سخت تر برای دیدن با انسان، اما بصری که در واقع چیزی اتفاق می افتد شده است. 

اما اجازه دهید سعی کنید اساسا روش های مختلف در حال حاضر. بیایید سعی مختلف الگوریتم به موجب آن ما شما بچه ها در این اصل شروع مواضع، که این منظور اینجا بود. و اجازه دهید پیش رو در حال حاضر است. و من قصد دارم برای انجام کاری حتی ساده تر، درست است؟ با نگاهی به گذشته، مبادله دو به دو دوباره و دوباره، تقریبا کمی باهوش. اجازه دهید چیزها حتی بیشتر ساده لوحانه، که در آن اگر من می خواهم به مرتب سازی این دوستان، اجازه دهید من فقط به دنبال حفظ برای کوچکترین عنصر. بنابراین در حال حاضر، 4 است کوچکترین عدد من دیده ام. من قصد دارم به یاد داشته باشید که. نه، 2 بهتر است، و به یاد داشته باشید که. 1 است و حتی کوچکتر است. 3، 7، 5. OK. One-- چه دوباره نام خود را؟ 

آرتی: آرتی. 

DAVID مالان: آرتی. بنابراین، آرتی، پیش بروید. من قصد دارم به شما خروج از خط. اگر شما می توانید به اینجا آمده است. و من نیاز به اتاق را برای او. ما یک نقطه تصمیم گیری کنید. چگونه ممکن است اتاق ما را برای آرتی اینجا در آغاز که در آن تعداد 1 متعلق؟ 

رسید شیفت. 

DAVID مالان: OK، ما می تواند همه تغییر. اما بهینه سازی ارائه شده است. که احساس می کند کمی آزار دهنده برای من به چهار نفر بپرسید به حرکت تمام راه را. چه چیز دیگری می توانم انجام دهم؟ 

رسید آنها را تغییر دهید. 

DAVID مالان: آنها را تغییر دهید. و چه نام خود را دوباره چیست؟ 

JACOB: یعقوب. DAVID مالان: یعقوب، حرکت می کند. بسیار کارآمد تر فقط به محل مبادله یعقوب با آرتی، به مجبور مخالف هر چهار از این دوستان، بسیار از شما سپاسگزارم، به موقعیت صحیح خود را. چه خوب در مورد آرتی در حال حاضر، او در موقعیت صحیح خود است. اجازه دهید این را دوباره انجام دهید. 2، که کوچکترین عدد من دیده ام است. 3، 7، 5. OK. 2 قطعا کوچکترین. لازم نیست برای انجام هر کار. اجازه دهید دوباره آن را انجام دهد. 6. کوچکترین؟ 8. نه. 4؟ آه. اجازه بدهید من به یاد داشته باشید 4. 3. اجازه بدهید من به یاد داشته باشید 3. 7، 5. کوچک ترین عدد من دیده می شود در این پاس 3 است. اگر شما می خواهم بیرون آمده است. از کجا می خواهیم به شما را؟ و چه نام شما چیه؟ 

ALANNA: Alanna. 

DAVID مالان: Alanna، ما رفتن به شما اخراج. اما این کارآمد تر، فقط به مبادله دو نفر، از به چند نفر دارند در واقع گریز است. حال بگذارید این را دوباره انجام دهد. من قصد دارم به 4 را انتخاب کنید، پس بیا در خارج. و چه کسی به حرکت؟ شماره 8، البته. اگر من در حال حاضر تعداد 5 پیدا کردن، در آمده است. شماره 8 رفتن به دوباره بیرون کردند. من در حال حاضر رفتن به پیدا کردن تعداد 6 در محل. 7 در محل. 8 در محل. 

چیزی که ما فقط در حال حاضر انجام شده است چیزی به نام انتخاب نوع، و اگر ما این تجسم، آن را رفتن به احساس کمی متفاوت است. اجازه دهید به جلو و از این به منو اینجا، در این visualization-- اجازه دهید این تغییر to-- آمده در، فایرفاکس. اجازه دهید این تغییر به انتخاب نوع. و اجازه دهید آن را به سرعت به عنوان قبل از، و شروع به تجسم حال حاضر. و این الگوریتم احساس های مختلف به آن. در هر تکرار، رک و پوست کنده، آن را حتی بیشتر سر راست است. من فقط انتخاب کوچکترین عنصر. در حال حاضر، رک و پوست کنده، من کمی خوش شانس بود که زمان، که در آن طبقه بندی شده اند فوق العاده سریع می باشد. عناصر تصادفی بود. این نیست، همانطور که ما در نهایت ببینید، اساسا سریع تر است. اما اجازه دهید یک سوم و نهایی را مشاهده کنید نزدیک در اینجا به عنوان به چه خبر است. بنابراین اجازه دهید پیش بروید و بچه ها شما تنظیم مجدد یک زمان نهایی به این منظور اینجا. 

و در حال حاضر، من قصد دارم به است کمی باهوش تر، تنها به دور از الگوریتم های ما. من قصد دارم برای انجام این کار. من قصد دارم برای رفتن نیست به جلو و عقب بسیار است. صادقانه بگویم، من از خسته ام تمام این تراورس. من فقط رفتن به آنچه که من هستم داده شده در ابتدای فهرست، و من قصد دارم به مرتب کردن بر اساس که پس از آن و وجود دارد. بنابراین در اینجا ما می باشد. شماره 4. من قصد دارم برای وارد کردن تعداد 4 را به لیست طبقه بندی شده اند. انجام می شود. من ادعا می کنم در حال حاضر، و فقط به این تر روشن، این بخش از لیست من طبقه بندی شده اند است. این نوع از ادعای احمقانه است، اما در واقع 4 در یک لیست از اندازه یک طبقه بندی شده اند. در حال حاضر، من قصد دارم به تعداد 2 را. شماره 2 من در حال حاضر به رفتن قرار دادن به جای مناسب. تا جایی که می کند 2 تعلق دارد؟ بدیهی است، بیش از اینجا. پس پیش بروید و حرکت به عقب، اگر شما می توانید. و چرا شما نمی بچه ها فقط به آهنگ های خود را با شما ایستاده است این زمان. و اجازه دهید به زور وارد می به ابتدای فهرست. پس کار کمی بیشتر. من تا به حال به حرکت در اطراف یعقوب، و چه نام شما چیه؟ 

AMIN: امین. 

DAVID مالان: امین. اما حداقل من نمی به عقب و جلو. من فقط گرفتن چیزهایی که من بروید. من فقط آنها را به قرار دادن در جای مناسب. 6، این است که در واقع بسیار آسان است. اجازه دهید به شما وارد بیش از وجود دارد، اگر شما فقط می خواستم به حرکت بیش از کمی. شماره 8، نیز بسیار آسان است. راست بیش از وجود دارد. لعنتی. شماره 1 ما نمی توانیم فقط مبادله با امین در اینجا، به دلیل این که در آینده به یک ظرف غذا تا نظم. بنابراین ما باید کمی باهوش تر است. بنابراین، آرتی، اگر شما می توانید به بالا و برای یک لحظه. اجازه دهید به پیش بروید و تغییر در حال حاضر، بر خلاف الگوریتم های قبلی ما، به اتاق را برای آرتی حق در اینجا در آغاز. بنابراین در پایان روز، من از نوع هستم انجام آنچه که من می خواستم برای جلوگیری از قبل. و به این ترتیب الگوریتم مرتب کردن بر اساس من است از معکوس، فکری، از آنچه در آن اصل بود. من فقط انجام تغییر در یک نقطه متفاوت است. در حال حاضر من در 3 هستم. اوه، لعنتی. ما را مجبور به انجام کار بیشتر است. بنابراین اجازه دهید به شما فشار است. اجازه دهید حرکت 8، 6، 4-- آه oh-- و 3 در حال رفتن به سمت راست وجود دارد. بنابراین حداقل پس انداز کمی این زمان. 7، و نه بیش از حد کار انجام شود. بنابراین اگر شما می خواهید به موسیقی پاپ پشت، اجازه دهید شما را وارد کنید. و در آخر، 5، اگر شما می خواهید به موسیقی پاپ به عقب، ما نیاز به شما تغییر، شما، شما، تا پنج در محل است. 

بنابراین در حال حاضر برای دیدن این در سطح بالا گرافیکی، اجازه دهید این الگوریتم انجام تجسم یک زمان اضافی. پس این ما باید نوعی درج تماس بگیرید. ما آن را فقط به عنوان اجرا سریع، و آن را شروع کنید. و این، بیش از حد، احساس متفاوت است. این نوع بهتر و بهتر است، اما آن را هیچ گاه کامل تا زمانی که من در و صاف که این فاصله است. از آنجا که، دوباره، من فقط مصرف چه من که از سمت چپ به راست داده شده است. بنابراین من می کنید خیلی خوش شانس که همه چیز کامل بود. به همین دلیل ما به حال این کمی mispositions که ما در طول زمان ثابت است. 

پس همه این الگوریتم ها به نظر می رسد در قدم کمی متفاوت اجرا شود. در واقع، که به شما می گویند است بهترین و سریع ترین تا کنون؟ حباب مرتب کردن بر اساس، برای اولین بار؟ مرتب کردن بر اساس انتخاب، دوم؟ مرتب کردن بر اساس درج، سوم؟ من می شنوم برخی از انواع انتخاب شود. دیگر افکار؟ 

پس معلوم است که همه از این الگوریتم ها اساسا فقط به عنوان کارآمد به عنوان هر other-- و یا، برعکس، فقط به عنوان ناکارآمد به عنوان هر یک از دیگر، چرا که ما اساسا می تواند انجام دهد بهتر از هر سه از این الگوریتم ها. و این یک بیت از یک دروغ سفید، بیش از حد. وقتی که من می گویند به عنوان کارآمد و یا به عنوان ناکارآمد، که حداقل برای ارزش فوق العاده زیادی از n است. هنگامی که ما در اینجا فقط هشت نفر، و یا شاید 50 یا بیشتر بارها بر روی صفحه نمایش، شما کاملا می تفاوت متوجه در میان این سه الگوریتم باشد. اما به عنوان نفر، تعداد زیادی از مردم، و یا تعدادی از شماره ها، و یا تعداد زیادی از مردم در گوشی کتاب، و یا تعدادی از صفحات وب در پایگاه داده گوگل بزرگتر و بزرگتر می شود، خواهیم دید که هر سه از این الگوریتم در واقع بسیار ضعیف است. و ما اساسا می تواند انجام دهد بهتر از آن. 

اجازه دهید یک نگاه، در نهایت، در چه این الگوریتم ممکن است صدا مانند در متن چند نفر دیگر و همچنین از طریق این تجسم اینجا است که ما را به شما معرفی تعدادی از الگوریتم باشد. اجازه دهید به پیش بروید و تبریک شرکت کنندگان ما در اینجا، همه از آنها خود را به خوبی طبقه بندی شده اند. اگر شما می خواهم را به یک هدیه فراق. شما می توانید شماره خود را به عنوان به خوبی نگه دارید. و آنچه خواهید دید، و یا به جای شنیدن، در حال حاضر، این است که به عنوان ما را برای تلفن های موبایل به هر یک از این میله و ارتباط آن را با نرم افزار، فرکانس های مختلف صدا، شما می توانید ذهن خود را audioly تر بسته بندی در اطراف هر یک از این چیزها چه شبیه. اول که مرتب سازی بر اساس درج است 

[تن] 

این نوع حباب دیگر است. 

[تن] 

مرتب کردن بر اساس انتخاب. 

[تن] 

چیزی به نام مرتب کردن بر اساس ادغام. 

[تن] 

مرتب کردن بر اساس گنوم. 

[تن] 

که در آن است برای CS50. ما شما را در روز چهارشنبه را ببینید. 

راوی: و اکنون، "عمیق افکار، "توسط Daven Farnham. و چرا از آن است برای حلقه؟ چرا آن را بهتر نمی کند؟ من می خواهم یک پنج حلقه را. 

[خنده]