DAVID ลัน: ทั้งหมดขวา ดังนั้นนี่คือ CS50 และนี่คือ ตอนนี้จุดเริ่มต้นของสัปดาห์ที่สาม ดังนั้นจนถึงขณะนี้เราได้ รับการเขียนโปรแกรมใน C ที่มีลักษณะเล็ก ๆ น้อย ๆ สิ่งที่ต้องการที่นี่ ดังนั้นเราจึงได้มีคู่ของ คมชัดรวมถึงที่ด้านบน เรามี int, หลักเป็นโมฆะและ แล้วสิ่งที่ต้องทำในตรงกลาง บิตของโค้ดบางส่วนที่อยู่ภายใน ฟังก์ชั่นที่ แต่ที่สำคัญได้รับความจริงที่ว่า เราได้รับการบอกว่าที่นี่เป็นโมฆะ ดังนั้นเป็นโมฆะทั้งหมดเวลานี้ระบุ ว่าโปรแกรมนี้เมื่อทำงาน สามารถทำงานผ่านชื่อของมัน คุณไม่สามารถพิมพ์คำอื่น ๆ หรือ ตัวเลขหลังชื่อของโปรแกรมเมื่อ ใช้มัน ดังนั้นสำหรับตัวอย่างเช่นถ้าโปรแกรมได้ เรียบเรียงไฟล์ที่เรียกว่าสวัสดี, คุณสามารถทำ ./hello แต่ที่เป็นมัน 

วิธีเดียวที่คุณสามารถทำได้ ป้อนอินพุตให้กับโปรแกรมนี้ คือการเรียกใช้ฟังก์ชัน ยกตัวอย่างเช่นการทำงานของสิ่งที่ เราได้รับการใช้ป่านนี้ ที่จะได้รับการป้อนข้อมูลจากผู้ใช้หรือไม่ 

ผู้ชม: รับสาย DAVID ลัน: ในการรับสายหรือ ได้รับ int หรือคุณเคยเห็นคนอื่น ๆ แม้ว่าคุณจะไม่ได้ใช้พวกเขายัง เช่นได้รับยาวนานและไม่ชอบ แต่คิดว่าเรา จริงต้องการที่จะเริ่มต้น การเขียนโปรแกรมที่มีเล็ก ๆ น้อย ๆ ที่หลากหลายและตรงไปตรงมาน้อยมาก เช่นคำสั่งที่คุณได้ รับหวังว่า นิด ๆ หน่อย ๆ คุ้นเคยกับ เช่นพื้นที่ซีดี Dropbox นี้แน่นอนการเปลี่ยนแปลง ไดเรกทอรีสมมติว่าคุณ คุณอยู่ในบ้านของจอห์นฮาร์วาร์ ไดเรกทอรีไปยังโฟลเดอร์ Dropbox ของคุณ ในขณะที่คำสั่งเช่นนี้ สร้างไดเรกทอรีใหม่ที่เรียกว่า pset2, ที่คุณอาจมีอยู่แล้วหรือ จะเร็ว ๆ นี้สำหรับปัญหาตั้งสอง ทำให้สวัสดีแน่นอนคือคำสั่ง ที่สร้างโปรแกรมที่เรียกว่าสวัสดี จากไฟล์ที่เรียกว่าสวัสดีดอทค และในแต่ละเหล่านี้ กรณีที่ตอนนี้เราได้มี ให้เหตุผลในการที่เรียกว่า บรรทัดคำสั่งให้กระพริบ เพื่อให้รู้ว่าสิ่งที่จะสร้างและอื่น ๆ mkdir ที่รู้ว่าสิ่งที่โฟลเดอร์เพื่อสร้าง และเพื่อให้แผ่นซีดีที่รู้ ที่คุณต้องการไป แต่จนถึงขณะนี้เราให้บอกว่า หลักฟังก์ชั่นเริ่มต้นที่ของคุณ มีการแสดงออกเป็นโมฆะ ภายในวงเล็บเหล่านั้น ซึ่งหมายถึงว่า ไม่สามารถใช้ข้อโต้แย้งใด ๆ 

ดังนั้นการเริ่มต้นวันนี้ สิ่งที่เรากำลังจะทำ คือเรากำลังจะเริ่มต้น สนับสนุนสิ่งนี้แม้ ในความเป็นจริงในกรณีนี้ที่คุณ ไม่ปกติพิมพ์ด้วยตนเอง ทำให้ได้รับการทำเช่นนี้ สำหรับเรามีไม่ แต่หนึ่งสองสามเพิ่มเติม สตริงหลังจากที่โปรแกรมชื่อ เสียงดังกราว ดังนั้นเราจะบรรลุนี้ 

ดีเริ่มต้นวันนี้ ในกรณีที่เราต้องการ เพื่อให้การป้อนข้อมูลผ่านทาง ที่เรียกว่าบรรทัดคำสั่ง เรากำลังจะเริ่มต้นการเพิ่ม ที่นี่สิ่งที่อยู่ในสีเหลือง เปลี่ยนเป็นโมฆะด้วย int argc จุลภาค สตริง argv วงเล็บเปิดตัวใกล้ ขณะนี้เป็นที่น่าสนใจ สำหรับคู่ของเหตุผล หนึ่งมันจะให้เราเขียน โปรแกรมที่มีเล็ก ๆ น้อย ๆ แบบไดนามิกมากขึ้น แต่ยิ่งไปร้องขอ, ก็จะเปิดขึ้น ขณะนี้การสนทนาเป็นไปได้ สิ่งที่อาร์เรย์สามารถจริงๆ ถูกนำมาใช้สำหรับสตริงสิ่งที่ จริงๆอยู่ภายใต้กระโปรงหน้ารถ จนกว่าจะถึงสัปดาห์ถัดไปเมื่อเราเริ่มต้นการดำน้ำ แม้ลึกเป็นวิธีเครื่องเป็น ทำให้ทุกการทำงานของสิ่งนี้ แต่ตอนนี้ขอวาด บางทีภาพ 

เมื่อคุณเขียนโปรแกรม กับหลักประกาศ ในทางนี้เช่นที่หลัก ใช้เวลาสองขัดแย้ง int and-- สิ่งที่ชนิดของข้อมูล เป็นอาร์กิวเมนต์ที่สอง? 

ผู้ชม: อาร์เรย์ DAVID ลัน: อาร์เรย์ เพื่อให้ดูเหมือนได้อย่างรวดเร็วก่อนเช่นนั้น สตริง แต่สังเกตวงเล็บ จำครั้งสุดท้ายที่เราแนะนำ ความคิดของอาเรย์ และใช้อาร์เรย์วงเล็บ ในสองสามบริบท คุณอาจใช้ตาราง วงเล็บที่จะไปลงในอาร์เรย์ และได้รับธาตุโดยเฉพาะอย่างยิ่งเช่น วงเล็บ 0 หรือ 1 หรือวงเล็บวงเล็บ 2 แต่ที่เราเห็นถ้าสั้น ๆ เมื่อสัปดาห์ที่แล้วว่าคุณยัง ใช้วงเล็บเหล่านี้ไป ประกาศขนาดของอาร์เรย์ ถ้าคุณรู้ล่วงหน้าว่าหลาย ints หรือว่าหลายสตริงหรือสิ่งที่คุณ จริงต้องการ ดังนั้นมันจะเปิดออกมีของ บริบทที่สามที่นี่ ที่มีจำนวนไม่ภายใน ของวงเล็บ เมื่อคุณระบุเป็นฉันมีที่นี่ ชื่อของสิ่งที่ต้องการ argv, ซึ่งเป็นเพียงวิธีแฟนซีของ บอกว่าเวกเตอร์อาร์กิวเมนต์ซึ่ง เป็นอีกวิธีที่จินตนาการของ บอกอาร์เรย์ของข้อโต้แย้ง, วงเล็บเปิดวงเล็บใกล้เพียง หมายความว่าคุณไม่จำเป็นต้อง รู้ล่วงหน้าว่าใหญ่ อาร์เรย์เป็นไปได้ แต่คุณรู้ว่ามันจะเป็นอาร์เรย์ ดังนั้นหากคุณไม่ทราบว่า จำนวนไม่วางไว้ในที่นั่น สำหรับวงเล็บเปิดตัวใกล้ หมายความว่า argv ไม่สตริง แต่อาร์เรย์ของสตริง ดังนั้น syntactically ถ้าคุณ คิดว่ากลับเมื่อสัปดาห์ที่แล้ว มันเป็นเรื่องที่คล้ายกันมากที่จะบอกว่า สิ่งที่ต้องการ int วัยวงเล็บเปิด และแล้วสิ่งนั้นไม่นาน ดังนั้นสิ่งที่จะมีลักษณะเช่นนี้? ลองวาดภาพ ดังนั้นเมื่อคุณเรียกใช้โปรแกรมนี้กับหลัก มีสองข้อโต้แย้งที่กำหนดไว้ภายใน วงเล็บที่คุณ เป็นหลักมีอย่างน้อยสองชิ้น ของหน่วยความจำส่งให้คุณ ภายใต้เครื่องดูดควัน หนึ่งที่ผมจะวาดเป็นรูปสี่เหลี่ยมผืนผ้านี้ เป็นไปได้ที่เรียกว่า argc และเช่นเดียวกับปะยางรวดเร็ว สิ่งที่เป็นชนิดข้อมูลของ argc? ดังนั้นจึงเป็น int ดังนั้นจำนวนที่เกิดขึ้น ที่จะไปในรอบ argc-- ออกที่ยืนสำหรับการนับอาร์กิวเมนต์ ในขณะที่ฉันได้วาด argv เป็นอาร์เรย์ และผมไม่ทราบจริงๆ นานแค่ไหนที่มันจะเป็นไปได้ ดังนั้นจุดประสงค์ของว​​ันนี้ dot dot dot มันอาจจะได้รับบางส่วนของความยาว แต่ฉันได้ภาพที่นี่ อย่างน้อยสี่สี่เหลี่ยม ดังนั้น argv ก้อนของหน่วยความจำที่เก็บ สตริงสตริง dot dot dot, และ argc เป็นเพียงหนึ่งก้อน ของหน่วยความจำสำหรับจำนวนเต็ม 

ดังนั้นตอนนี้ขอให้เป็นคนเล็ก ๆ น้อย ๆ ที่แม่นยำยิ่งขึ้น หากเมื่อฉันมีสตริง ในอาร์เรย์นี้เรียกว่า argv ฉันต้องการที่จะได้รับไปที่พวกเขา บุคคลเช่นเดียวกับสัปดาห์ที่แล้ว เรากำลังจะใช้สัญกรณ์ เช่น argv วงเล็บ 0 ที่จะได้รับสิ่งแรกที่อาเรย์ argv วงเล็บ 1 ที่จะได้รับ สิ่งที่สองและอื่น ๆ ที่สำคัญที่นี่เป็นที่เรายังคง 0 indexed-- เราก็ยังคงนับตั้งแต่ 0 ดังนั้นตอนนี้ขอจริง นำสิ่งที่อยู่ในนี้ ถ้าฉันจะรวบรวมโปรแกรมที่เรียกว่า สวัสดีจากไฟล์ที่เรียกว่าสวัสดีดอทค, แล้วก็เรียกใช้โปรแกรมที่ ด้วยจุดเฉือนสวัสดี สิ่งที่ไม่คอมพิวเตอร์แล็ปท็อปของฉัน ลักษณะเหมือนอยู่ใต้ฝากระโปรง ช่วงเวลาที่ผมทำงานจุด เฉือนทักทายและกด Enter? อย่างนี้อาจจะเป็น สิ่งที่เราสามารถอธิบาย เป็นเนื้อหาของคอมพิวเตอร์ของคุณ หน่วยความจำหรือหน่วยความจำเข้าถึงโดยสุ่ม RAM-- ในคำอื่น ๆ คอมพิวเตอร์ อย่างใดสำหรับคุณอย่างน่าอัศจรรย์, ทำให้หมายเลข 1 ใน argc อาคา argcount, และมันทำให้ตัวอักษรสตริง ./hello ใน argv วงเล็บ 0 ฉันมีความคิดตรงไปตรงมาในสิ่งที่เป็น ในวงเล็บ argv 1 หรือ 2 หรือ 3 เพราะถ้าผู้ใช้ไม่ได้ พิมพ์สิ่งที่นอกเหนือจาก ./hello, เราจะคิดว่าสิ่งเหล่านี้ เป็นค่าขยะได้มากที่สุด เพื่อที่จะพูด ชิ้นที่ของหน่วยความจำ อยู่ แต่ก็ไม่ได้ขึ้นอยู่กับเรา จะมองไปที่พวกเขาเพราะ argcount เป็นเพียงหนึ่ง 

ตอนนี้ในขณะเดียวกันถ้าฉัน เขียนใช้โปรแกรมอื่น cd ซึ่งเป็นมากขึ้นอย่างถูกต้องคำสั่ง ในพื้นที่ซีดีของคุณกระพริบ prompt-- Dropbox-- เมื่อฉันทำงานที่มีประสิทธิภาพ เมื่อโปรแกรม cd มีการเรียกใช้ argc, ภายในของหน่วยความจำคอมพิวเตอร์ของฉันคือ briefest ที่สุดที่สองหมายเลข 2 แล้ว o วงเล็บ argv มี cd, argv วงเล็บที่ 1 มี Dropbox, และแล้วแน่นอนคำสั่ง เสร็จสมบูรณ์เพื่อให้ทุกหน่วยความจำนี้ เป็นหลักจะหายไปและ ถูกนำมาใช้อย่างอื่น และนั่นเป็นเหตุผลที่ผมบอกว่า เพียงแค่เสี้ยววินาที 

ในขณะเดียวกันถ้าเราทำ mkdir pset2, ภาพที่มีลักษณะเกือบจะเหมือนกัน แต่ด้วยเงื่อนไขที่แตกต่างกันภายใน argv ถ้าผมทำเสียงดังกราวรีบทักทาย สวัสดีดอทค, ความคิดเดียวกัน สิ่งอื่น ๆ ที่เต็มไปใน argv และ argc แน่นอนคือ 4 ดังนั้นในคำอื่น ๆ แม้ว่าแถวนี้ อาจจะมีการ dot dot dot ของบาง ความยาวตัวแปรจึงจะพูด คุณมักจะรู้ว่าที่สิ้นสุดของมัน เป็นเพราะ argc จะบอกคุณ สิ่งที่จุดที่คุณต้องหยุด มองไปที่องค์ประกอบใน argv คุณสามารถมองไปที่สี่ ทั้งหมดในกรณีนี้ 

ดังนั้นตอนนี้ขอใช้เวลาดู, บางทีโปรแกรมที่ง่าย ที่เพิ่งกล่าวว่าสวัสดี กับใครบางคนเช่น Zamyla ดังนั้นผมจึงเรียกร้องฉันจะเขียนโปรแกรม ในเวลาเพียงชั่วครู่หนึ่งผ่านทางที่ฉันจะทำ ./hello พื้นที่ Zamyla และจากนั้นฉันต้องการ โปรแกรมของฉันที่จะพิมพ์ออกมาบางสิ่งบางอย่าง ซุปเปอร์ง่ายๆเช่น "สวัสดี, Zamyla". GetString ขณะนี้ในอดีตที่ผ่านมาเราได้ใช้ ดังนั้นในอดีตที่ผ่านมาแม้ว่า คุณไม่คุ้นเคยกับการเขียนโปรแกรม ราคาที่คุณสามารถชักขึ้น โปรแกรมที่ใช้ GetString แล้วใช้ printf จะกล่าวทักทายกับ Zamyla แต่ขอไม่ใช้ GetString เวลานี้ ให้ฉันแทนเข้าไป Appliant และทำรวมถึงมาตรฐานผม O จุดชั่วโมง ให้ฉันยังรวมถึง CS50 จุดชั่วโมง ตอนนี้ int หลักและตอนนี้ฉัน จะไม่ทำวันนี้เป็นโมฆะ แต่ฉันจะทำ int argc สตริง argv วงเล็บเปิดวงเล็บปิด ไม่ระบุจำนวน และตอนนี้ที่นี่เป็นของฉันเรียกว่าจะทำอย่างไร สิ่งที่ฉันจะทำตอนนี้คือผม จะทำบิตของการก้าวกระโดดของความเชื่อที่ ฉันจะคิดว่าผู้ใช้ จะใช้โปรแกรมนี้อย่างถูกต้อง และฉันก็จะไป ทำ printf สวัสดี% SN ดังนั้นไม่มีอะไรใหม่มี แต่ผมต้องการที่จะใส่ตอนนี้สิ่งที่คำว่า ประเภทของผู้ใช้ตามชื่อของโปรแกรม ดังนั้นถ้าผมทำพื้นที่ ./hello Zamyla ผม ต้องการเข้าถึงอย่างใดโปรแกรม อ้าง unquote "Zamyla". ดังนั้นฉัน สามารถไปลงในเวกเตอร์อาร์กิวเมนต์ของฉัน อาร์เรย์ของสตริงและถ้าคำสั่ง อีกครั้งเป็นพื้นที่ ./hello Zamyla, สิ่งที่จำนวนฉันต้องการ ใส่ใน argv ที่นี่? ผู้ชม: 1 DAVID ลัน: 1 เนื่องจาก วงเล็บ 0 เปิดออก เป็นไปได้ ชื่อของโปรแกรมที่เราเห็น ดังนั้นตัวที่ 1 เป็นคำแรก ผมว่าผู้ใช้พิมพ์ ฉันจะไปข้างหน้าและบันทึกนี้ ฉันจะไปลงในโฟลเดอร์ของฉัน ที่ฉันได้วางไฟล์นี้ ฉันจะไม่ทำให้สวัสดี 3 comp IO ของตกลง ./hello Zamyla ใส่ ผมทำอะไรผิดหรือเปล่า? ผมถูกจับด้วยความประหลาดใจ ตัวเองเพียงแค่ช่วงเวลาที่มี ผมทำอะไรผิดหรือเปล่า? 

ผู้ชม: ชื่อ 

DAVID ลัน: ไฟล์ของ เรียกว่าจริง hello3.c และผมว่าเพียง มั่นคงเพราะเราได้ มีของ hello.c ใน ที่ผ่านมาในรหัสออนไลน์ จึงขอแก้ไข ./hello นี้ วงเล็บรีบ 3 Zamyla ใส่ และตอนนี้เรามีสวัสดี Zamyla ในขณะที่ฉันสามารถเปลี่ยนนี้เพื่อ เป็นร็อบหรือจริงๆคำอื่น ๆ 

แต่ขอให้พิจารณากรณีที่มุม สิ่งที่คุณอาจคาดหวังจะเกิดขึ้นถ้า ผมไม่ได้พิมพ์ชื่อทุกคนที่ทั้งหมดหรือไม่ 

ผู้ชม: ข้อผิดพลาด 

DAVID ลัน: ข้อผิดพลาด ของการจัดเรียงบางอย่างอาจจะเป็น ลองมาดูกัน ใส่ Null ดังนั้น printf เป็นจริงเป็น เล็ก ๆ น้อย ๆ ในการป้องกันของเรา ที่นี่และตัวอักษรพิมพ์วงเล็บปิดเปิด null แต่สิ่งที่เลวร้ายสามารถเกิดขึ้นได้ และเพียงเพื่อแสดงให้เห็นถึง สิ่งที่คุณอย่างแน่นอน ไม่ควรจะทำอย่างไรให้เป็นไปใน ที่นี่และเริ่ม poking รอบ ใช่มั้ย? ถ้าฉันรู้ว่าภาพใน หน่วยความจำเป็นหลักนี้ argv วงเล็บที่ 1 มี Zamyla, argv วงเล็บ 0 มี ./hello หรือ ./hello-3 สิ่งที่อยู่ในวงเล็บ 2 หรือไม่? เพื่อให้สามารถตอบว่า ถามตัวเองใช่มั้ย? ฉันสามารถเปลี่ยน 1 ถึง 2 ตอนนี้ผมสามารถคอมไพล์สวัสดี 3 ./hello3 ขอขยายและกด Enter ขออภัย ไม่มีเครื่องหมายคำพูด ที่น่าสนใจ เพื่อให้เป็นชนิดของเย็น เห็นสิ่งอื่นที่อยู่ในที่นี่ 

ดังนั้นอะไรที่อยู่ภายในแล็ปท็อปของฉันได้อย่างไร ขอบันทึกด้วยวงเล็บ 3 ทำให้ hello3, ./hello-3 อยากรู้อยากเห็น และตอนนี้ให้ของได้รับจริงๆ bold-- 50 นั่นคือการดำน้ำลึกจริงๆ ในหน่วยความจำของคอมพิวเตอร์ของฉัน 50 ดัชนีใน เพื่อให้สวัสดี 3 ./hello-3 อยากรู้อยากเห็น สิทธิทั้งหมดตอนนี้ฉันเพียงแค่ จะได้รับรถโดยประมาท ลองไป 5,000 ขวาทั้งหมด เพื่อให้ฉันคอมไพล์ ทำให้ hello3, ./hello-3 ตกลง ตอนนี้บางท่านอาจจะมี นำหลอดไฟออกไป มีกี่คนที่มี เห็นข้อความนี้มาก่อนหรือไม่ ตกลง ดังนั้นทำไม? 

ราคาต่อรอง are-- และมีที่แตกต่างกัน สิ่งที่สามารถก่อให้เกิดนี้ และเห็นได้ชัดว่าคุณอยู่ในที่ดี company-- เราได้อย่างชัดเจน ทำให้เกิดสิ่งที่เรียกว่า ความผิดส่วน และเรื่องยาวสั้นสำหรับวันนี้ผม ได้สัมผัสส่วนของหน่วยความจำ ที่ฉันไม่ควรจะมี ส่วนที่เพียงแค่หมายความว่าก้อน หน่วยความจำที่ฉันไม่ควรจะมี ตอนนี้เครื่องคอมพิวเตอร์รับประกันว่าถ้าผม ทำงาน ./helloZamyla ที่ฉันสามารถสัมผัส argv เป็นวงเล็บ 0 และ argv วงเล็บ 1 แต่ argc เป็นค่า 2 นั่นหมายความว่าผม เพียง allowed-- มันเรียงลำดับของการให้เกียรติ system-- ที่จะสัมผัส วงเล็บ 0 และ 1 วงเล็บ ถ้าฉันไปที่ไกลออกไปม​​ี อย่างที่จะเป็นหน่วยความจำที่มี RAM ของฉันที่มีอยู่ในร่างกาย ในเครื่องคอมพิวเตอร์ แต่ใครจะรู้ว่ามีอะไรบ้าง? อันที่จริงผมทำงานหลาย โปรแกรมในเวลาหนึ่ง ผมอาจจะมี seen-- ถ้าฉันไม่ได้ การทำเช่นนี้ใน Appliant แต่บน Mac หรือ PC-- ของฉันฉันอาจจะมี เห็นเนื้อหาของอีเมล ฉันอาจจะได้เห็นทันที ข้อความที่ผมส่งไปเมื่อเร็ว ๆ นี้ สิ่งที่อาจจะมี อ้อยอิ่งรอบในหน่วยความจำ จะได้รับการเข้าถึงได้โดยวิธีการ สัญกรณ์นี้วงเล็บพลตาราง หรือแย่ลงยังคุณอาจมี พบว่าหนึ่งในรหัสผ่านของฉัน ที่ฉันเพิ่งจะพิมพ์ไว้ในที่ โปรแกรมได้ถูกเก็บไว้ในหน่วยความจำเพื่อให้เป็น ในการตรวจสอบฉันและ จากนั้นเพียงแค่ชนิดของทิ้งมันไว้ ในแรมจนกว่าฉันจะออกจากโปรแกรมที่ 

และแน่นอนนี่คือหนึ่งใน อันตรายและเป็นหนึ่งในอำนาจ ของการใช้ภาษาเช่นซี คุณมีการเข้าถึงอิสระ กับเนื้อหาทั้งหมด ของหน่วยความจำของโปรแกรมที่ และสิ่งที่คนเลวได้ แม้ทำใน cases-- ที่ โดยเฉพาะอย่างยิ่งเมื่อเรา จะได้รับการเขียนโปรแกรมเว็บ ในช่วงท้ายของภาคการศึกษาที่เราจะ ทบทวน topic-- นี้จะกระตุ้นรอบ อาจเป็นคนของคอมพิวเตอร์ หน่วยความจำและหาสิ่งที่อยากรู้อยากเห็นดังกล่าว อย่างที่เราเห็นมี หรือแม้แต่เลวยังรหัสผ่านที่เขา หรือเธอก็จะสามารถใช้ในการทำสิ่งที่ไม่ดี 

เพื่อให้ชัดเจนผมไม่ควรได้กระทำนี้ เพราะสิ่งที่แปลกเริ่มเกิดขึ้น แท้จริงนี้เป็นโปรแกรม crashing นี้จะเทียบเท่า ของ Mac OS หรือใน Windows หน้าต่างโปรแกรมเพียงแค่หายไป ข้อผิดพลาดที่ไม่คาดคิดเกิดขึ้น ในสภาพแวดล้อมที่บรรทัดคำสั่ง เราเห็นอะไรเช่นนี้ แต่ที่ว่าทำไมเป็นฉันเพียงแค่สัมผัส หน่วยความจำที่ไม่ได้อยู่กับผม 

จึงขอป้องกันนี้ นิด ๆ หน่อย ๆ ในทางที่แตกต่างกัน โดยดูที่โปรแกรมนี้ที่นี่ ดังนั้นอีกครั้งโครงกระดูก ที่เราเห็น earlier-- และฉันได้เน้นครั้งนี้ int และทุกเวลานี้หลักมี แน่นอนกลับค่า แม้ว่าในส่วนของการบรรยายของเรา ตัวอย่างที่เราไม่เคยใช้ครั้งเดียว กลับอะไรในหลัก เราเพียงแค่เขียน printf ใกล้ วงเล็บปีกกาและที่มัน แต่สำหรับฟรีสิ่งที่ คอมไพเลอร์ได้รับการทำสำหรับคุณ ได้อย่างมีประสิทธิภาพจะกลับ 0 สำหรับคุณ เปลี่ยนแทนดูและมันก็เล็ก ๆ น้อย ๆ counterintuitive-- ที่ 0 เป็นสิ่งที่ดี มันไม่ได้หมายความว่าเท็จต่อ 0 เป็นเรื่องที่ดีและการใด ๆ ที่ไม่ใช่ 0 มูลค่าโลกได้ตัดสินใจ สามารถมีความหมายผิดพลาด ดังนั้นถ้าคุณได้เคยสับสน บางสิ่งบางอย่างขึ้นมาบนเครื่องคอมพิวเตอร์ของคุณ หรือโปรแกรมที่เพิ่งเสียชีวิตไปกับคุณและ คุณเคยหน้าต่างที่ผิดพลาดบางอย่าง บนหน้าจอของคุณข้อผิดพลาดว่า ลบ 49 หรือข้อผิดพลาด 23-- บาง value-- โดยพลการที่ดูเหมือนว่า เพราะโปรแกรมเมอร์ได้ยากรหัส เช่นค่าลบหรือบวก 49 23 แทนจำนวนใด ๆ ที่กล้าพูดว่า 4 พันล้านของสิ่งที่เป็นไปได้ ที่อาจจะไปอย่างผิดปกติในโปรแกรม 

ดังนั้นวิธีการที่ฉันอาจจะใช้เวลา ประโยชน์จากการนี​​้เองได้หรือไม่ ดีให้ฉันเปิดโปรแกรม ที่ผมเขียนล่วงหน้า และกระตุ้นรอบที่เรียกว่าออนไลน์สวัสดี 4 และมันก็เป็นเหมือนกันเกือบยกเว้นว่า มีนิด ๆ หน่อย ๆ ของข้อผิดพลาดการตรวจสอบ ในกรณีนี้ผมเคยประกาศอีกครั้ง หลักที่การสองข้อโต้แย้ง แต่เวลานี้อยู่บนเส้น 17 แจ้งให้ทราบล่วงหน้า ฉันทำบิตของการตรวจสอบสุขภาพจิตดี ฉันแน่ใจว่า argc เท่ากับเท่ากับ 2 เพราะถ้ามันเป็นที่ หมายความว่าฉันสามารถได้อย่างปลอดภัย สัมผัสไม่เพียง แต่วงเล็บ 0 แต่วงเล็บ 1 และฉันไปข้างหน้าและพิมพ์ออกมา ในกรณีนี้ Zamyla หรือร็อบ หรืออะไรก็ตามที่ฉันพิมพ์คำออก และตอนนี้เพียงเพื่อให้ได้ เล็ก ๆ น้อย ๆ ที่เหมาะสมมากขึ้น ฉันจะกลับมาอย่างชัดเจน 0 ถึงมีความหมายทั้งหมดเป็นอย่างดี ไม่มีอะไรเกิดขึ้นไม่ดี 

แต่โดยการประชุมผมจะไป กลับ 1 หรือตรงไปตรงมาใด ๆ ที่ไม่ใช่ 0 ค่า หากสิ่งที่ผิดพลาดไป ขณะนี้ผู้ใช้จะไม่ไป จริงๆสังเกตเห็นสิ่งที่เกิดขึ้น อันที่จริงถ้าผมไปลงในไดเรกทอรีนี้ เราขยายและไม่ทำให้สวัสดี 4 ./hello-4 Zamyla ทำงานเป็นฉันคาดหวัง แต่ถ้าฉันแทนไม่ต้องพิมพ์ สิ่งที่ดูเหมือนจะไม่มีอะไรเกิดขึ้น แต่มันก็ไม่ได้ผิดพลาด และถ้าผมทำอะไรบางอย่างแทน เช่นร็อบเป็นทนาย ในการแบ่งปัน Thayer-- ข้อมูลโดยพลการ แต่แจ้งให้ทราบล่วงหน้า argv 1, 2, 3, 4, และ 5 ตอนนี้ควรอยู่ในความทรงจำ ที่มากเกินไปเป็นสิ่งที่ไม่ได้ โปรแกรมของฉันคาดว่า เพราะผมได้ตรวจสอบว่า argc เท่ากับเท่ากับ 2 หรือไม่ ดังนั้นตอนนี้ผมปกป้องนี้ 

ตอนนี้เป็นกันเรา programmer-- หรือมากกว่าเรา users-- ไม่เคยเห็นที่ 0 หรือ 1 แต่การใช้ เครื่องมือที่เรียกว่าการดีบักเกอร์หรือเครื่องมืออื่น ๆ ในขณะที่เราจะได้เห็นก่อน นานคุณโปรแกรมเมอร์ จริงจะเห็นสิ่งที่อาจจะ จะผิดภายในของโปรแกรมของคุณ 

ดังนั้นคำถามใด ๆ เกี่ยวกับ argc? ใช่ 

ผู้ชม: ผมเคยเห็นพวกเขาอยู่ที่ไหน ไม่ได้มีตัวละคร [ไม่ได้ยิน] เพียงสตริงดาววันเช่นกล่าวว่า ตัวอักษรดอกจันจุลภาค พวกเขามีความคิดที่นี่? 

DAVID ลัน: พวกเขา ดังนั้นคำถามคือคุณจะมี โปรแกรมเห็นเป็นครั้งคราว เช่นนี้ที่ทำไม่ได้ พูดวงเล็บสตริง argv แต่แทนที่จะพูดอะไรบางอย่าง เช่นถ่านวงเล็บ argv ดาว และมีคนอื่น ๆ แม้กระทั่ง สายพันธุ์ที่คุณอาจจะเห็น พวกเขาเป็นจริงเทียบเท่า สำหรับตอนนี้เรามีเหล่านี้ การเรียงลำดับของล้อการฝึกอบรม ในรูปแบบของสตริงใน CS50 ห้องสมุด แต่ในเวลาเพียงกว่าหนึ่งสัปดาห์ หรือเพื่อให้เราจะเอาที่ อุดตันโดยสิ้นเชิงและจริง มองสิ่งที่ถ่านและดาว นี้และวิธีที่เกี่ยวข้องกับหน่วยความจำ การแสดงมากขึ้นโดยทั่วไป ดังนั้นเราจะกลับมาที่ 

คำถามอื่น ๆ หรือ argv argc ของเราหรือไม่ ใช่ ผู้ชม: ทำไมมันไม่กลับมา ข้อผิดพลาด [ไม่ได้ยิน] DAVID ลัน: ทำไมไม่ได้ กลับข้อผิดพลาด only-- โอ้! ในกรณีที่ก่อนหน้านี้เมื่อเรา ถูก futzing รอบกับหน่วยความจำ ทำไมมันมี แต่จะกลับข้อผิดพลาด เมื่อผมพิมพ์เป็นจำนวนมาก? คำตอบสั้น ๆ คือเราก็มีโชคดี โดยทั่วไปคอมพิวเตอร์ จัดสรรหน่วยความจำในชิ้น, และมันทำให้ผมก้อนใหญ่พอที่ ฉันได้ไปโดยไม่ถูกสังเกตเห็น ของสัมผัสวงเล็บ 2 วงเล็บ 3 วงเล็บ 50 แต่ทันทีที่ผมผลักดัน โชคของฉันฉันไปเกิน ขอบเขตของก้อนของหน่วยความจำ ระบบปฏิบัติการมีให้ฉัน และนั่นคือเมื่อมัน clamped ลงและกล่าวว่าไม่มี ข้อผิดพลาดของการแบ่งส่วน ใช่ 

ผู้ชม: วิธีการที่ไม่ใช้คอมพิวเตอร์ รู้ค่าของ argc? 

DAVID ลัน: อย่างไร คอมพิวเตอร์รู้ค่าของ argc? เมื่อคุณเรียกใช้โปรแกรมโปรแกรมที่ โดยลักษณะของการให้กระพริบ ถูกส่งอาร์เรย์ของ คำที่ถูกพิมพ์ ที่พรอมต์ที่เป็น พิมพ์ที่พรอมต์ และดังนั้นจึงเป็นปฏิบัติการของคุณ ระบบที่เป็นหลัก populates ข้อโต้แย้งหลักสำหรับคุณ เพื่อให้เป็นหนึ่งในบริการที่ ที่คุณได้รับการจัดเรียงของแอบ ภายใต้ประทุนของ ระบบปฏิบัติการ คำถามอื่น ๆ ? ใช่ 

ผู้ชม: อะไรถ่ายโอนข้อมูลหลักหมายความว่าอย่างไร DAVID ลัน: อะไรถ่ายโอนข้อมูลหลักหมายความว่าอย่างไร เพื่อให้เป็นคำถามที่ดี และให้ฉันกลับไป ไดเรกทอรีนี้ที่นี่ และคุณจะสังเกตเห็นว่า ผมมีไฟล์ใหม่มี มันเรียกว่าแน่นอนที่สำคัญและเป็น จริงโดยปกติจะเป็นไฟล์ที่ดีขนาด ที่เป็นหลักภาพรวมของ เนื้อหาของหน่วยความจำโปรแกรมของฉัน หรือ RAM เมื่อมันตก และสิ่งนี้จะเป็นประโยชน์ อาจ diagnostically, เมื่อเราพูดในการบรรยายในอนาคต และส่วนที่เกี่ยวกับการแก้จุดบกพร่อง เพราะคุณสามารถจริงทำ เทียบเท่ากับการชันสูตรศพดิจิตอล ในแฟ้มที่จะช่วยให้คิดออก สิ่งที่คุณทำผิดพลาดในโปรแกรมของคุณ ใช่ 

ผู้ชม: เป็น argc คำสั่งใน ตัวเองหรือคุณสามารถตั้งชื่ออะไร? 

DAVID ลัน: คำถามที่ดี เป็น argc คำสั่งในตัวเอง หรือคุณสามารถตั้งชื่ออะไร? มันแน่นอนไม่ได้คำสั่ง เป็นเพียงตัวแปรของ ชื่อหรือชื่ออาร์กิวเมนต์ฯ และอื่น ๆ อย่างเรา สามารถโทร foo นี้ เราสามารถเรียกแถบนี้ซึ่งมีแนวโน้มที่ จะไปถึงคำว่าคอมพิวเตอร์ นักวิทยาศาสตร์ไป แต่โดยการประชุมเราใช้ argc และ argv แต่นั่นเป็นเพียงมนุษย์ การประชุมไม่มีอะไรมาก ขวาทั้งหมด ดังนั้นจะเปิดออกฉันได้รับ บอกบิตของ lie-- สีขาว และตรงไปตรงมาในอนาคตคุณจะเห็น เราได้รับการโกหกสีขาวอื่น ๆ แต่ตอนนี้เรากำลังจะ ที่จะปอกเปลือกกลับหนึ่งของเหล่านี้ ในกรณีนี้ที่นี่เมื่อผมก่อนหน้านี้ วิ่งโปรแกรมเช่น ./hello หรือ ./hello-3 Zamyla เรามีเนื้อหาของฉัน หน่วยความจำของคอมพิวเตอร์มอง ๆ เช่น นี้ แต่จำสิ่งที่เป็นสตริง เราพูดว่าอะไรสัปดาห์ที่ผ่านมาสิ่งที่ สตริงเป็นจริงภายใต้กระโปรงหน้ารถหรือไม่ ผู้ชม: อาร์เรย์ของตัวอักษร DAVID ลัน: มันเป็น อาร์เรย์ของตัวอักษรใช่มั้ย? ดังนั้นเราอาจจะมีอาร์เรย์ของ สตริง แต่ในทางกลับสตริง เป็นอาร์เรย์ของตัวอักษร ดังนั้นถ้าผมต้องการที่จะ ทางทวารหนั​​กเมื่อผมวาดภาพนี้ ฉันควรจะวาดภาพ มันมากขึ้นเล็ก ๆ น้อย ๆ เช่นนี้ โดยในแต่ละเหล่านี้ ดัชนีของอาร์เรย์ argv ของฉัน มีความเป็นตัวเองสตริงทั้ง ที่ตัวเองเป็นในอาร์เรย์ และตอนนี้โกหกสีขาว เรากำลังบอกวันนี้ เป็นภาพที่ไม่ได้ ดูค่อนข้างเช่นนี้ ในความเป็นจริงเป็นสี่เหลี่ยมเล็ก ๆ โดยปกติจะอยู่ด้านนอกของรูปสี่เหลี่ยมขนาดใหญ่ มี แต่เราจะกลับไปที่มาไม่นาน แต่นี้เป็น ./hello เครื่องหมาย 0, ว่าเป็นตัวละครพิเศษที่ demarcates ปลายสายที่ และเราได้มีอีกคนหนึ่งหลังจากที่ ชื่อ Zamyla ของ ดังนั้นสิ่งนี้หมายความว่าอย่างไร 

ดีให้ฉันไปข้างหน้าและ เปิดสองตัวอย่างอื่น ๆ ที่มีอยู่ทั่วไป หนึ่งเรียกว่า argv1.c และอื่น ๆ เป็น argv2 เป็นโปรแกรมซุปเปอร์ง่ายที่ จะแตกต่างจากโปรแกรมที่ผ่านมา ในที่นี้ผมใช้ argc และ argv ขึ้นที่นี่ และตอนนี้ฉันการบูรณาการกับการห่วง ในสาย 18 จาก i = 0 ได้ถึง argc และสิ่งที่ฉันจะทำ กับบรรทัดของรหัสที่นี่? ในภาษาอังกฤษ นี้เห็นได้ชัดแสดงให้เห็นถึงการใช้ argc แต่ในภาษาอังกฤษสิ่งที่ไม่ มันทำอย่างไรถ้าผมใช้โปรแกรมนี้ ใช่? 

ผู้ชม: มันจะพิมพ์ของคุณ หน้าจอหลายครั้งตามที่คุณต้องการ DAVID ลัน: แน่นอน ดังนั้นสิ่งที่ฉันพูด พิมพ์ที่พร้อมท์ก็ จะไหลกลับ พวกเขามาที่ผมต่อหนึ่งบรรทัด จึงขอไปข้างหน้าและทำเช่นนี้ ให้ฉันไปลงในไดเรกทอรีของฉัน และจะทำให้ ./argv1 argv1 และตอนนี้ขอให้มันง่าย ลองทำอะไรในตอนแรก มันก็พิมพ์ออกมาสิ่งหนึ่งและ ที่จริงชื่อของโปรแกรม เพราะที่อยู่ในวงเล็บ 0 ถ้าตอนนี้ผมบอกว่า foo ก็จะทำ ทั้งสองและถ้าผมบอกว่าบาร์ foo, มันจะบอกว่าทั้งสามสิ่ง ตอนนี้ที่น่าสนใจบ้างบางที แต่จำ argv ที่ เป็นอาร์เรย์ของสตริง, แต่สตริงเป็นอาร์เรย์ของตัวอักษร, เพื่อให้เราสามารถใช้สิ่งที่ขึ้นรอย และใช้ที่พื้นฐาน ตรรกะและสร้างรหัสที่ มีลักษณะเล็ก ๆ น้อย ๆ ที่เป็นความลับมากขึ้นเป็นที่ยอมรับ แต่โดยมีที่ซ้อนกัน ห่วงสิ่งที่คล้าย กับสิ่งที่คุณอาจจะจำจากมาริโอ ตัวอย่างเช่นถ้าคุณทำมันด้วยวิธีนี้ 

ดังนั้นตอนนี้สังเกตเห็นในบรรทัดที่ 19 ฉัน อีกครั้ง iterating กว่าข้อโต้แย้งของฉัน จาก 0 ขึ้นไป argc และตอนนี้ในสาย 21-- ฉัน เคล็ดลับการกู้ยืมเงินจาก week-- ล่าสุด ฉันกำลังตรวจสอบสิ่งที่เป็น ความยาวของ argv ฉันวงเล็บ ฉันเก็บคำตอบใน n ที่ แล้วฉันการบูรณาการจาก J เมื่อวันที่ ถึง n โดยที่เจจะเริ่มต้นให้เป็น 0 ดังนั้นการประชุมสำหรับการนับ เมื่อคุณใช้ฉันถ้าคุณมี วงที่ซ้อนกันคุณจะไม่สามารถใช้ฉันอีกครั้ง มิฉะนั้นคุณจะข่มขี่อาจ, ค่าที่อยู่ด้านนอกของวงภายใน ดังนั้นฉันใช้เจโดยการประชุม เราอาจจะใช้ k ถ้าคุณมีมากกว่า k คุณอาจ มีมากเกินไปทำรังโดยทั่วไป แต่ตอนนี้สังเกตเห็น printf ของฉัน สายแตกต่างกันเล็กน้อย ผมไม่ได้พิมพ์% s ฉัน พิมพ์ c% ซึ่งแน่นอน เป็นตัวยึดสำหรับถ่าน 

และตอนนี้สังเกตเห็นรูปแบบนี้ ใหม่ เรายังไม่ได้เห็นมาก่อน แต่เหตุผลนี้ก็หมายความว่า ได้รับสายบอดใน argv และได้รับสิ่งที่ j? ผู้ชม: ตัวอักษร DAVID ลัน: ตัวอักษรในสตริงที่ ดังนั้นโดยใช้วงเล็บ ตามด้วยวงเล็บ นี่คือการดำน้ำครั้งแรก เป็นสตริง argv ของ แล้วที่สอง วงเล็บกับเจ เป็นดำน้ำในตัวละครของ สตริงโดยเฉพาะอย่างยิ่งว่าใน argv และจากนั้นเพียงแค่การวัดที่ดี ผมพิมพ์บรรทัดใหม่ที่นี่ ดังนั้นตอนนี้ให้ฉันไปข้างหน้าและเปิด ขึ้นหน้าต่างใหญ่กว่าเล็กน้อย เพื่อให้เราสามารถเห็นสิ่งนี้ในการดำเนินการ ให้ฉันไปลงในโฟลเดอร์นั้น และตอนนี้จะทำให้ argv-2-- whoops-- ทำให้ argv-2, ./argv 2 ใส่ และมันก็เป็นเพียงเล็กน้อยยาก การอ่านในแนวตั้ง แต่ที่จริงชื่อของ โปรแกรมตามด้วยบรรทัดว่าง ตอนนี้ให้ฉันไปข้างหน้าและทำ foo ในทำนองเดียวกันยากที่จะอ่าน แต่ก็ แน่นอนการพิมพ์หนึ่งตัวอักษรต่อบรรทัด และถ้าผมทำบาร์ก็ตอนนี้ พิมพ์สายผู้โดยสาย ดังนั้น Takeaway ที่นี่เป็นไม่มาก ว่าว้าวดูที่เคล็ดลับใหม่นี้เรียบร้อย ที่คุณจะได้รับเนื้อหา ของตัวละครที่เฉพาะเจาะจงของอาเรย์, แต่วิธีการที่เราจะเอาพื้นฐานเหล่านี้ ความคิดเช่นเดียวกับการจัดทำดัชนีในอาร์เรย์ แล้วจัดทำดัชนีใน อาร์เรย์ที่อยู่ในแถวที่ และเพียงแค่ใช้ความคิดเดียวกันกับ ตัวอย่างที่ซับซ้อนมากขึ้นเล็กน้อย แต่พื้นฐานจริงๆมีไม่ได้ เปลี่ยนแปลงได้ตั้งแต่สัปดาห์ที่แล้ว 

ขณะนี้เป็นที่จัดเรียงของทันเวลา ในการที่เรียกคืนในสัปดาห์ที่ศูนย์ เราเล่นกับสมุดโทรศัพท์เช่นนี้ และแม้ว่านี้จะเห็นได้ชัด ชิ้นทางกายภาพของกระดาษ คุณสามารถชนิดของคิด สมุดโทรศัพท์เป็นอาร์เรย์ แน่นอนถ้าคุณจะ reimplement ชิ้นนี้ชิ้นส่วนเหล่านี้จากกระดาษ ในเครื่องคอมพิวเตอร์อาจจะ คุณจะใช้สิ่งที่ เช่นอาร์เรย์ในการจัดเก็บทุกคน ชื่อและหมายเลขจากทุกทาง ถึง Z ดังนั้นนี่เป็นสิ่งที่ดีเพราะ มันจะช่วยให้เรามีโอกาสที่ บางทีที่จะต้องพิจารณาวิธีการที่คุณอาจจะ จริงใช้สิ่งที่ต้องการที่ เช่นเดียวกับชุดของประตูที่นี่ ดังนั้นถ้าผม could-- เราจำเป็นต้องใช้ อาสาสมัครที่จะมาขึ้น ลองมาดูกัน ใบหน้าที่ไม่คุ้นเคยอาจจะ ใบหน้าที่ไม่คุ้นเคยอาจจะ วิธีการเกี่ยวกับสีส้ม? ที่นี่ เสื้อสีส้มมาขึ้น 

ให้เป็นไปข้างหน้าในขณะนี้และย้าย ประตูเหล่านี้ไปยังด้านข้าง ย้ายเหล่านี้ออกจากทางสำหรับสักครู่ คุณชื่ออะไร? 

AJAY: 

DAVID ลัน: Ajay เดวิด มีความสุขที่ได้พบคุณ ขวาทั้งหมด เพื่อให้เรามีที่อยู่เบื้องหลังเหล่านี้หก ประตูระบบดิจิตอล screen-- หรือค่อนข้างเจ็ดประตู screen-- ทั้งกลุ่มของตัวเลข และฉันได้บอกคุณไม่มีอะไร ใน advance-- ตกลง? AJAY: ไม่มีอะไรล่วงหน้า DAVID ลัน: ทั้งหมดที่ฉันต้องการให้คุณทำ ตอนนี้คือการหาสำหรับฉันและสำหรับเรา จริงๆจำนวน 50, หนึ่งขั้นในเวลา 

AJAY: หมายเลข 50? 

DAVID ลัน: หมายเลข 50 และคุณสามารถที่จะเปิดเผยสิ่งที่ หลังแต่ละประตูเหล่านี้ โดยเพียงแค่การสัมผัสด้วยนิ้ว บ้าที่สุด [หัวเราะ] 

[APPLAUSE] 

ทำได้ดีมาก ตกลง เรามีของขวัญที่น่ารัก รางวัลสำหรับคุณที่นี่ เลือกของคุณของภาพยนตร์ที่เรา เมื่อสัปดาห์ที่แล้วกล่าวถึง 

AJAY: โอ้มนุษย์ โอ้ฉันไม่เคยเห็น Spaceballs 

DAVID ลัน: Spaceballs ขวาทั้งหมด ดังนั้นถือเพียงหนึ่งช่วงเวลา How-- ขอให้นี้ moment-- เชื่อฟัง คุณไม่ได้ไปเกี่ยวกับ หาจำนวน 50? AJAY: ผมเลือกแบบสุ่ม DAVID ลัน: เพื่อให้คุณเลือก แบบสุ่มและมีโชคดี AJAY: ใช่ DAVID ลัน: OK ที่ดีเยี่ยม ดังนั้นตอนนี้คุณไม่ได้มี อากาศโชคดีอะไร อาจจะเกิดขึ้นหลังประตูเหล่านี้หรือไม่ ดังนั้นถ้าฉันไปข้างหน้าและ เปิดเผยตัวเลขเหล่านี้ที่นี่ พวกเขาเป็นจริงในลำดับแบบสุ่ม และที่ดีที่สุดที่คุณสามารถมี ทำตรงไปตรงมาคือในที่สุด ในกรณีที่เลวร้ายที่สุดในการตรวจสอบพวกเขาทั้งหมด เพื่อให้คุณได้ซุปเปอร์โชคดีที่ ไม่ใช่สิ่งที่เราจะเรียกอัลกอริทึม ใช่ขอแสดงความยินดี แต่ตอนนี้ let's-- อารมณ์ขันฉันถ้าคุณสามารถทำได้ ให้ไปที่แท็บที่นี่ และนี่คือตัวเลขในอย่างชัดเจน สิ่งที่น่าจะเป็นแบบสุ่ม และพวกเขาก็ แต่ตอนนี้ถ้าผมเรียกร้องแทน ที่อยู่เบื้องหลังประตูเหล่านี้ เป็นตัวเลขที่เรียงลำดับ เป้าหมายตอนนี้คือการยัง พบกับเราได้หมายเลข 50 แต่ทำมันอัลกอริทึมและ บอกเราว่าคุณกำลังจะไปเกี่ยวกับเรื่องนี้ และถ้าคุณพบว่าคุณเก็บภาพยนตร์ คุณพบว่ามันไม่คุณจะให้มันกลับ AJAY: ดังนั้นฉันจะไปตรวจสอบปลาย ครั้งแรกเพื่อตรวจสอบว่า there's-- [เสียงหัวเราะและ APPLAUSE] DAVID ลัน: นี่คุณไป ลองมาดูที่หนึ่ง ของรุ่นก่อน Ajay ของ ฌอนที่ไม่ได้ค่อนข้างโชคดี ตกลงเพื่อให้งานของคุณที่นี่ ฌอนเป็นดังต่อไปนี้ ฉันได้ซ่อนอยู่หลังเหล่านี้ ประตูหมายเลขเจ็ด แต่ซุกอยู่ในบางส่วนของประตูเหล่านี้ รวมทั้งเป็นตัวเลขที่ไม่ใช่เชิงลบอื่น ๆ และเป้าหมายของคุณคือการคิดนี้ แถวบนสุดของตัวเลขเป็นเพียงอาร์เรย์ เราเป็นแค่ลำดับของชิ้น ของกระดาษที่มีตัวเลขอยู่ข้างหลังพวกเขา และเป้าหมายของคุณคือเพียงใช้ด้านบน อาร์เรย์ที่นี่หาฉันหมายเลขเจ็ด และเราก็จะไปวิจารณ์ วิธีการที่คุณไปเกี่ยวกับการทำมัน พบกับเราได้หมายเลขเจ็ดโปรด ฉบับที่ 5, 19, 13 มันไม่ใช่คำถามเคล็ดลับ 1 ณ จุดนี้คะแนนของคุณไม่มาก ที่ดีดังนั้นคุณอาจรวมทั้งให้ไป 3 ไปเมื่อวันที่ ตรงไปตรงมาผมไม่สามารถช่วย แต่สงสัย สิ่งที่คุณได้คิดเกี่ยวกับ 

SEAN: ฉันสามารถใช้จากเพียงแถวบนสุด DAVID ลัน: เฉพาะแถวบนสุด เพื่อให้คุณได้มีสามทางด้านซ้าย ดังนั้นหาฉัน 7 

[ผู้ชมตะโกนคำแนะนำ] ดังนั้นทั้งสองของผู้ที่เป็นที่น่าตื่นตาตื่นใจ ด้วยเหตุผลที่แตกต่างกันมาก ดังนั้นนี่คือที่ที่เรา ซ้ายปิดช่วงเวลาที่ผ่านมา และความเข้าใจที่สำคัญที่นี่ ได้ประตูเหล่านี้มีจำนวน หลังเหล่านั้นที่ถูกจัดเรียงเหมาะ Takeaway ซึ่งเป็นที่ที่คุณสามารถทำ พื้นฐานที่ดีขึ้นใน ยกตัวอย่างที่สองนี้ และแน่นอนว่าเป็นของฌอน ความพยายามครั้งแรกที่มีตัวเลขสุ่ม เช่นเดียวกับ before-- แต่ทันที เป็นตัวเลขเหล่านี้จะเรียงลำดับ เหมือนสมุดโทรศัพท์ สิ่งที่คุณสามารถเห็นได้ชัดว่าทำอย่างไร หรือวิธีการที่คุณสามารถใช้ประโยชน์จากความรู้ที่? ใช่ 

ผู้ชม: คุณไปครึ่งทาง [ไม่ได้ยิน] DAVID ลัน: ใช่ ว่า ดังนั้นสัญชาตญาณแรก Ajay เป็น เพื่อตรวจสอบการสิ้นสุดที่ผมจำได้ แล้วเราเรียงลำดับของการเสร็จสิ้นแล้ว ตัวอย่างได้อย่างรวดเร็ว แต่ถ้าเราเริ่มที่จะทำอะไรได้มากกว่านี้ มีระบบตามสายเหล่านั้น แต่เริ่มต้นอาจจะอยู่ใน กลางเพราะพวกเขากำลังจัดเรียง ทันทีที่เราเปิดเผย จำนวน 16 เราจึง know-- และขอให้ทำตรง that-- เรา จึงรู้ว่า 50 ในกรณีที่วันนี้ ได้จะต้องเป็นไปทางขวา ดังนั้นเช่นเดียวกับในสัปดาห์ที่ศูนย์เมื่อ เราฉีกสมุดโทรศัพท์ในช่วงครึ่งปี และโยนครึ่งหนึ่งของ ปัญหาออกไปความคิดเดียวกันที่นี่ เราสามารถโยนครึ่งนี้ ของปัญหาออกไป และอาจเป็นสิ่งที่คุณ อาจจะทำอัลกอริทึม, เมื่อคุณรู้ว่า 50 จะต้องเป็น ไปทางขวาถ้ามันได้ทุกที่ คือพยายามที่มีอยู่ตรงกลาง ของประตูที่เหลือ แน่นอน 50 จะสูงกว่า กว่า 42 ดังนั้นเราจึงสามารถ โยนที่เหลืออยู่นี้ ไตรมาสของปัญหาออกไป และในที่สุดระบุ 50 สิ่งที่ชอบ แต่เช่นเดียวกับ สมุดโทรศัพท์ตัวเลขเหล่านี้ ถูกมอบให้กับเราแล้วใน เพื่อเรียงลำดับซึ่งจะทำให้เรา กับคำถามอย่างไรคุณ ได้รับสิ่งที่เป็นคำสั่งแยก? และตรงไปตรงมาในสิ่งที่ค่าใช้จ่าย? เป็นสิ่งหนึ่งที่จะเป็น ส่งสมุดโทรศัพท์ แล้วสร้างความประทับใจให้เพื่อนของคุณโดยการหา หมายเลขโทรศัพท์อย่างรวดเร็วจริงๆใช่มั้ย? 32 หน้าฉีกขาดออกไปหา คนที่ออกมาจาก 4 พันล้านหน้า เรากล่าวว่าเป็นตัวอย่างที่ชัดเจนอย่างใดอย่างหนึ่ง แต่เท่าใดเวลาที่มันใช้เวลา Verizon ในการจัดเรียงสมุดโทรศัพท์ที่? เวลาเท่าไหร่มันใช้เวลาเรา การเรียงลำดับตัวเลขเหล่านี้เจ็ด? นั่นเป็นคำถามที่เราได้ ป่านนี้ละเว้นสมบูรณ์ 

จึงขอตอบคำถามนี้ตอนนี้ และเราทุกคนออกมาจากภาพยนตร์ตอนนี้ แต่เรามีลูกความเครียดบางอย่าง ถ้าบอกว่าแปดอาสาสมัคร จะไม่คิดร่วมงานกับเราได้ที่นี่? ให้เป็นไปข้างหน้าและทำวิธีการเกี่ยวกับ สี่ของคุณสามของคุณที่นี่? ได้รับใบหน้าใหม่บาง และสี่ของคุณมี? และ now-- ให้ไม่อคติตรงนี้และ หมายเลขแปดกว่าที่นี่ในท้ายที่สุด มาขึ้น ขวาทั้งหมด ดังนั้นสิ่งที่เรามีที่นี่ แต่ละท่านคือหมายเลข หากคุณต้องการที่จะไป ข้างหน้าจะใช้หมายเลขนี้ คุณชื่ออะไร? 

Artie: Artie 

DAVID ลัน: Artie โอเค คุณหมายเลข 1 

AMIN: อามิน DAVID ลัน: อามิน เดวิด คุณจำนวน 2 และไปข้างหน้าในขณะที่ฉันมือ คุณแผ่นกระดาษ สายตัวเองขึ้นมาในหน้าของเพลง ยืนอยู่ในลำดับเดียวกับที่มีขึ้น 

แอนดี้: สวัสดี, แอนดี้ 

DAVID ลัน: แอนดี้มันเป็นเรื่องดีที่จะเห็นคุณ จำนวน 3 

JACOB: จาค็อบ 

DAVID ลัน: จาค็อบ, หมายเลข 4 ยินดีต้อนรับบนเรือ GRANT: แกรนท์ DAVID ลัน: แกรนท์ จำนวน 5 

อลันนา: อลันนา 

DAVID ลัน: อลันนา, หมายเลข 6 

FRANCES: ฟรานเซส DAVID ลัน: ฟรานเซสจำนวน 7 และ? 

ราเชล: ราเชล 

DAVID ลัน: ราเชลจำนวน 8 ขวาทั้งหมด ไปข้างหน้าและได้รับตัวเองในคำสั่งนี้ ให้ฉันใส่หนึ่งที่เหลือ ยืนเพลงในสถานที่ คุณไม่จำเป็นต้องยืนอยู่ที่ไหน ตกลง ไปข้างหน้าและเพียงแค่ใส่หมายเลขของคุณ ที่ผู้ชมจะได้เห็นพวกเขาใน เพลงยืนหันหน้าออก และหวังว่าครั้งแรกของเรา สติการตรวจสอบตรงนี้ 4, 2, 6 โอ้ รอสักครู่ เราไม่ได้มี 8 ฉันต้องการที่จะขับไล่ท่านออกจาก ตัวอย่างเช่นอย่างใด ฉบับที่ ไม่มีที่ตกลง ลองมาดูกัน เราสามารถทำเช่นนี้ Stand by มีที่เราจะไป ที่ถูกต้อง ขวาทั้งหมด ดังนั้นตอนนี้เรามี 8, 1, 3 7, 5 ตกลง ที่ดีเยี่ยม 

ดังนั้นคำถามที่อยู่ในมือเป็นที่ สิ่งที่ค่าใช้จ่ายและผ่านสิ่งที่วิธีการ สามารถเราจริงการเรียงลำดับตัวเลขเหล่านี้ที่นี่ เพื่อให้เราชนิดของสามารถทำงานไปข้างหลัง ในท้ายที่สุดและ decide-- มันจริงๆ ที่น่าประทับใจก็คือการที่มีประสิทธิภาพจริงๆ ที่ฉันสามารถแบ่งและ พิชิตสมุดโทรศัพท์ได้หรือไม่ มันมีประสิทธิภาพจริงๆที่ ผมสามารถแบ่งและพิชิต ชิ้นดิจิตอลเหล่านั้น กระดาษบนกระดาน ถ้าบางทีมันอาจจะเป็นไปค่าใช้จ่ายเรา โชคลาภในเวลาหรือพลังงานหรือ CPU รอบ ที่จะได้รับจริงข้อมูลของเรา ในบางเรียงลำดับ? จึงขอถามคำถามที่ 

ออกดังนั้นครั้งแรกที่ตัวเลขเหล่านี้ เพื่อสุ่มสวยมาก และผมจะนำเสนอ หนึ่งขั้นตอนวิธีหรือกระบวนการ โดยที่เราสามารถจัดเรียงคนเหล่านี้ ฉันจะเข้าใกล้ นี้สวยอย่างไร้เดียงสา และฉันจะรับรู้ ว่ามันเป็นชนิดของจำนวนมากสำหรับฉัน มัดใจของฉันรอบ ชุดข้อมูลทั้งหมดในครั้งเดียว แต่คุณรู้อะไรไหม ฉันจะทำให้บาง การแก้ไขเล็กน้อยที่ง่ายมาก 4 และ 2 จะออกคำสั่งว่า เป้าหมายคือการไปจากที่ 1 ถึง 8 เพื่อให้คุณรู้อะไรไหม ฉันจะมีคุณ พวกสลับถ้าคุณสลับ ตำแหน่งและร่างกาย ชิ้นส่วนของกระดาษ ตอนที่ 4 และ 6 เหล่านี้อยู่ในลำดับที่ ฉันจะออกจากผู้ที่เป็น 6 และ 8 ผู้อยู่ในลำดับที่ จะปล่อยให้พวกเขาเป็น 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 Nope แลกเปลี่ยนกันเถอะ และตอนที่ 7 และ 8 และสิ่งที่ชื่อของคุณอีกครั้งหรือไม่ FRANCES: ฟรานเซส 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-- บาร์ขนาดใหญ่ที่จะย้ายไปทางขวา บาร์เล็ก ๆ น้อย ๆ ที่จะย้ายไปทางซ้าย ให้ยกเลิกกระบวนการนี​​้ และความเร็วนี้ขึ้น จะเร็วมากดังนั้นเราสามารถทำได้ รับความรู้สึกที่ระดับสูงของสิ่งที่ แน่นอนการจัดเรียงฟองจะทำ อันที่จริงก็เดือดถึง ด้านขวามือของรายการ หรืออาเรย์, บาร์ขนาดใหญ่ และตรงกันข้ามบาร์เล็ก ๆ น้อย ๆ bubbling ทางของพวกเขาลงไปทางซ้าย แม้ว่าที่ก้าวเร็วขึ้น กว่าที่เราทำก่อนหน้านี้ ดังนั้นยากที่จะมองเห็นได้ด้วยมนุษย์ แต่เห็นว่าเป็นสิ่งที่แน่นอน ที่เกิดขึ้น 

แต่ลองพื้นฐาน วิธีการที่แตกต่างกันตอนนี้ ลองที่แตกต่างกัน อัลกอริทึมโดยเรามีคุณ คนเริ่มต้นในการเดิมเหล่านี้ ตำแหน่งซึ่งเป็นคำสั่งที่นี่ และขอให้ไปข้างหน้าขณะนี้ และฉันจะทำอะไรบางอย่าง ได้ง่ายใช่มั้ย? ในการหวนกลับ, การแลกเปลี่ยนคู่อีกครั้ง และฉลาดอีกครั้งเกือบจะเล็ก ๆ น้อย ๆ ลองทำสิ่งที่มากยิ่งขึ้นอย่างไร้เดียงสา, ซึ่งถ้าผมต้องการที่จะเรียงลำดับคนเหล่านี้ ให้ฉันเพียงแค่ให้มอง สำหรับองค์ประกอบที่เล็กที่สุด ดังนั้นตอนนี้, 4 จำนวนน้อยที่สุดที่ผมเคยเห็น ฉันจะจำไว้ว่า ไม่มี 2 จะดีกว่าและจำไว้ว่า 1 ยังมีขนาดเล็ก 3, 7, 5 ตกลง One-- สิ่งที่ชื่อของคุณอีกครั้งหรือไม่ 

Artie: Artie 

DAVID ลัน: Artie ดังนั้น Artie ไปข้างหน้า ฉันจะดึงคุณออกมาจากแถว หากคุณสามารถกลับมาที่นี่ และฉันต้องการที่จะทำให้ห้องพักสำหรับเขา เรามีจุดตัดสินใจที่นี่ วิธีการที่เราอาจจะทำให้ห้องพักสำหรับการ Artie ที่นี่ ที่จุดเริ่มต้นที่จำนวน 1 เป็น? 

ผู้ชม: กะ 

DAVID ลัน: OK เรา สามารถเปลี่ยนทุกคน แต่นำเสนอการเพิ่มประสิทธิภาพ ที่ให้ความรู้สึกน่ารำคาญเล็ก ๆ น้อย ๆ สำหรับผมที่จะถามคนสี่คน ที่จะย้ายไปตลอดทางลง อะไรที่ฉันจะทำอย่างไร 

ผู้ชม: สลับพวกเขา 

DAVID ลัน: สวิทช์พวกเขา และสิ่งที่ชื่อของคุณอีกครั้งหรือไม่ 

JACOB: จาค็อบ DAVID ลัน: จาค็อบย้าย มากมีประสิทธิภาพมากขึ้นเพียงแค่มี จาค็อบสถานที่แลกเปลี่ยนกับ Artie, เมื่อเทียบกับการบังคับให้ ทั้งสี่ของคนเหล่านี้ ขอบคุณมากที่ ตำแหน่งที่ถูกต้องของพวกเขา มีอะไรที่ดีเกี่ยวกับ Artie ตอนนี้ เขาอยู่ในตำแหน่งที่ถูกต้องของเขา ลองทำเช่นนี้อีกครั้ง 2 ว่าเป็นจำนวนน้อยที่สุดที่ผมเคยเห็น 3, 7, 5 ตกลง 2 แน่นอนที่เล็กที่สุด จะได้ไม่ต้องทำงานใด ๆ ลองทำมันอีกครั้ง 6 ที่เล็กที่สุด? 8 Nope 4? ooh ให้ฉันจำ 4 3 ให้ฉันจำได้ว่า 3 7, 5 จำนวนน้อยที่สุดฉันได้ เห็นที่ผ่านนี้คือ 3 หากคุณต้องการออกมา ที่เราจะไปทำให้คุณ? และสิ่งที่ชื่อของคุณ? 

อลันนา: อลันนา 

DAVID ลัน: อลันนาเราไม่ จะต้องขับไล่คุณ แต่ที่มีประสิทธิภาพมากขึ้น เพียงแค่สลับสองคน มากกว่าที่จะมีคนหลายคน จริง ๆ แล้วก้าวเท้าเลี่ยงไป ตอนนี้ขอทำเช่นนี้อีกครั้ง ฉันจะเลือก 4 เพื่อให้มาออก และผู้ที่จะย้าย? หมายเลข 8 แน่นอน ถ้าตอนนี้ผมพบว่าจำนวน 5 มาออก หมายเลข 8 จะได้รับการขับไล่อีกครั้ง ตอนนี้ผมจะไปหาหมายเลข 6 ในสถานที่ 7 ในสถานที่ 8 ในสถานที่ 

สิ่งที่เราได้ทำขณะนี้คือ สิ่งที่เรียกว่าการจัดเรียงเลือก และถ้าเราเห็นภาพนี้ก็ จะรู้สึกแตกต่างกันเล็กน้อย ให้เป็นไปข้างหน้าและจากนี้ เมนูที่นี่ visualization-- นี้ ขอเปลี่ยนยา่กมาใน Firefox ลองเปลี่ยนนี้ในการเรียงลำดับตัวเลือก และให้ความเร็วขึ้นเช่นเดิม และเริ่มการแสดงตอนนี้ และขั้นตอนวิธีนี้มี ความรู้สึกที่แตกต่างกันไป ในแต่ละซ้ำตรงไปตรงมา ก็จะยิ่งตรงไปตรงมามากขึ้น ฉันแค่เลือกองค์ประกอบที่เล็กที่สุด ตอนนี้ตรงไปตรงมาผมได้เล็ก ๆ น้อย ๆ โชคดีที่ เวลาในการที่จะถูกจัดเรียงอย่างรวดเร็ว องค์ประกอบที่เป็นแบบสุ่ม มันไม่ได้เป็นอย่างที่เราจะได้ในที่สุด ดูพื้นฐานได้เร็วขึ้น แต่ขอดูสามและครั้งสุดท้าย วิธีการที่นี่เป็นสิ่งที่เกิดขึ้น จึงขอไปข้างหน้าและการตั้งค่าพวกคุณ เป็นครั้งสุดท้ายที่จะอยู่ในคำสั่งนี้ที่นี่ 

และตอนนี้ฉันกำลังจะไป เป็นเพียงเล็กน้อยที่ฉลาดมากขึ้น เพียงเพื่อออกรอบขั้นตอนวิธีการของเรา ฉันจะทำเช่นนี้ ฉันจะไม่ไป กลับมามาก ตรงไปตรงมาฉันเหนื่อยของ ทุก traversing นี้ ฉันแค่ไปที่จะใช้สิ่งที่ฉัน ให้ที่จุดเริ่มต้นของรายการที่ และฉันจะต้องเรียงลำดับ ที่แล้วและมี ดังนั้นที่นี่เรามี จำนวน 4 ฉันจะใส่หมายเลข 4 ในรายการเรียงลำดับ เสร็จแล้ว ฉันเรียกร้องขณะนี้และเพียงเพื่อให้มากขึ้น ที่ชัดเจนเป็นส่วนหนึ่งของรายการของฉันนี้จะถูกจัดเรียง เป็นชนิดของการเรียกร้องโง่ แต่แน่นอน 4 จะถูกจัดเรียงในรายการของขนาดหนึ่ง ตอนนี้ผมกำลังจะไปใช้เวลาอยู่กับจำนวน 2 หมายเลข 2 ตอนนี้ผมจะไป ใส่ลงในสถานที่ที่เหมาะสม เพื่อที่จะเป็น 2? เห็นได้ชัดกว่าที่นี่ เพื่อไปข้างหน้าและย้ายกลับถ้าคุณสามารถ และทำไมไม่พวกคุณเพียงแค่ใช้ เพลงของคุณยืนอยู่กับคุณในเวลานี้ และขอฝืนใส่คุณ เป็นจุดเริ่มต้นของรายการ การทำงานมากขึ้นเพื่อให้เล็ก ๆ น้อย ๆ ผมต้องย้ายจาค็อบรอบ และสิ่งที่ชื่อของคุณ? 

AMIN: อามิน 

DAVID ลัน: อามิน แต่อย่างน้อยผมไม่ได้กลับไปมา ฉันแค่สละสิ่งที่เป็นฉันไป ฉันแค่ใส่พวกเขา ในสถานที่ที่เหมาะสม 6 นี้เป็นจริงง่ายสวย ลองใส่คุณไปที่นั่นถ้าคุณ แค่อยากจะย้ายไปเล็กน้อย หมายเลข 8 ยังง่ายสวย ตรงนั้น บ้าที่สุด จำนวน 1 เราไม่สามารถเพียงแค่ สลับกับอามินนี่ เพราะที่เกิด เลอะคำสั่ง ดังนั้นเราจะต้องเป็นเพียงเล็กน้อยที่ฉลาดมากขึ้น ดังนั้น Artie ถ้าคุณสามารถทำได้ สำรองสักครู่ ให้เป็นไปข้างหน้าและเปลี่ยนตอนนี้ ซึ่งแตกต่างจากอัลกอริทึมที่ก่อนหน้านี้ของเรา ที่จะทำให้ห้องพักสำหรับการ Artie ขวาที่นี่ที่จุดเริ่มต้น ดังนั้นในตอนท้ายของวันที่ผมชนิดของ ทำในสิ่งที่ฉันต้องการที่จะหลีกเลี่ยงก่อนที่จะ และอื่น ๆ ขั้นตอนวิธีของฉันคือการจัดเรียง ของกลับปัญญา จากสิ่งที่มันเป็นมา แต่เดิม ฉันแค่ทำขยับ ที่จุดที่แตกต่างกัน ตอนนี้ฉันอยู่ที่ 3 โอ้แช่ง เราต้องทำงานมากขึ้นอีกครั้ง จึงขอผลักดันให้คุณออก ขอย้าย 8, 6, 4-- โอ้ oh-- และ 3 จะไปอยู่ที่นั่น เงินฝากออมทรัพย์เพื่อที่เล็กน้อยอย่างน้อยเวลานี้ 7 ไม่ได้ทำงานมากเกินไปที่จะทำ ดังนั้นถ้าคุณต้องการที่จะปรากฏ กลับมาให้คุณใส่ และสุดท้าย, 5, ถ้าคุณ ต้องการที่จะปรากฏหลังเรา ต้องการที่จะเปลี่ยนคุณให้คุณ คุณจนกว่าห้าอยู่ในสถานที่ 

ดังนั้นตอนนี้ที่จะเห็นนี้ ระดับสูงกราฟิก ขอทำขั้นตอนนี้ ภาพหนึ่งเวลาเพิ่มเติม ดังนั้นเรานี้จะเรียกการจัดเรียงแทรก เราจะทำงานได้เช่นเดียวกับ ได้อย่างรวดเร็วและเริ่มต้นได้ที่นี่ และมันก็มีความรู้สึกที่แตกต่างกัน มันเรียงลำดับของการเริ่มดีขึ้นและ ดีกว่า แต่ก็ไม่เคยที่สมบูรณ์แบบ จนกว่าฉันจะไปในและราบรื่นในช่องว่างเหล่านั้น เพราะอีกครั้งฉันก็แค่เอาสิ่งที่ ฉันได้รับจากซ้ายไปขวา ดังนั้นผมจึงไม่ได้โชคดีอย่างนั้น ว่าทุกอย่างเป็นที่สมบูรณ์แบบ นั่นเป็นเหตุผลที่เรามีเล็ก ๆ น้อย ๆ เหล่านี้ mispositions ว่าเราคงที่เมื่อเวลาผ่านไป 

เพื่อให้ทุกขั้นตอนวิธีการเหล่านี้ดูเหมือนจะ ทำงานก้าวที่แตกต่างกันเล็กน้อย ในความเป็นจริงที่คุณจะพูดได้ก็คือ ที่ดีที่สุดหรือเร็วที่สุดเพื่อให้ห่างไกล? การจัดเรียงฟองแรก? การจัดเรียงตัวเลือกที่สองหรือไม่ แทรกเรียงลำดับที่สามหรือไม่ ผมได้ยินบางประเภทตัวเลือก ความคิดอื่น ๆ 

ดังนั้นจึงปรากฎว่า ทั้งหมดของขั้นตอนวิธีการเหล่านี้ เป็นพื้นฐานเช่นเดียวกับที่มีประสิทธิภาพเป็น แต่ละ other-- หรือตรงกันข้ามเช่นเดียวกับ ไม่มีประสิทธิภาพเช่นกัน เพราะเราสามารถทำพื้นฐาน ดีกว่าทั้งสาม อัลกอริทึมเหล่านี้ และที่บิตของการโกหกสีขาวอีกด้วย เมื่อฉันพูดมีประสิทธิภาพ หรือไม่มีประสิทธิภาพ ที่อย่างน้อยสำหรับ ค่ามีขนาดใหญ่สุดของ n เมื่อเรามีเพียงแปดคนที่นี่ หรืออาจจะ 50 หรือดังนั้นบาร์บนหน้าจอ คุณอย่างจะสังเกตเห็นความแตกต่าง ในหมู่ที่สามเหล่านี้อัลกอริทึม แต่เป็น n จำนวนคนที่ หรือจำนวนของตัวเลข หรือจำนวนของคนที่อยู่ในโทรศัพท์ หนังสือเล่มหรือจำนวนของหน้าเว็บ ในฐานข้อมูลของกูเกิ้ล ได้รับที่ใหญ่กว่าและใหญ่กว่า เราจะเห็นว่าทั้งสามเหล่านี้ อัลกอริทึมเป็นจริงสวยดี และเราสามารถทำพื้นฐาน ที่ดีกว่านั้น 

ลองมาดูในที่สุด ในสิ่งที่อัลกอริทึมเหล่านี้อาจ เสียงเหมือนใน บริบทของบางคนอื่น ๆ เช่นกันโดยวิธีการนี​​้ การแสดงที่นี่ ที่จะแนะนำให้เรา จำนวนของอัลกอริทึม ให้เป็นไปข้างหน้าและแสดงความยินดีกับ ผู้เข้าร่วมของเราที่นี่ทุกคน แยกตัวเองเป็นอย่างดี หากคุณต้องการที่จะใช้เป็นของขวัญพรากจากกัน คุณสามารถเก็บหมายเลขของคุณได้เป็นอย่างดี และสิ่งที่คุณจะเห็น หรือค่อนข้างได้ยินตอนนี้ ก็คือว่าในขณะที่เราใส่เสียง แต่ละแถบเหล่านี้ และเชื่อมโยงเข้ากับซอฟแวร์ ความถี่ที่แตกต่างกันของเสียง คุณสามารถมัดใจ audioly มากขึ้นของคุณ รอบสิ่งที่แต่ละสิ่งเหล่านี้ ลักษณะเหมือน คนแรกที่จะเรียงลำดับการแทรก 

[TONES] 

นี้จะเรียงลำดับฟอง 

[TONES] 

การจัดเรียงตัวเลือก 

[TONES] 

สิ่งที่เรียกว่าการจัดเรียงเวียน 

[TONES] 

Gnome การจัดเรียง 

[TONES] 

ที่มันสำหรับ CS50 เราจะเห็นคุณในวันพุธที่ 

บรรยาย: และตอนนี้ "ลึก ความคิด "โดย Daven อัม มันเป็นห่วงทำไม? ทำไมไม่ทำให้ดีขึ้นได้อย่างไร ฉันต้องการให้วงห้า 

[หัวเราะ]