JASON HIRSCHHORN:歡迎 三個星期,大家好。 我們有一個忙碌的,但令人興奮的 擺在我們面前的一節。 因此,首先,因為我們已經做了一些 進展的過程,但我們仍然 有一個很大的學問剩下要做的,我 要告訴你們一些資源 這應該被證明是令人難以置信 有用你不僅接近你 習題集,而且還消化所有的 我們給你們的材料 講座和短褲和一節。 然後,我們將先花20 節會超過25分鐘 GDB,您可能會或可能不會有 用在這點上,但它是一個 令人難以置信的有用工具,將 幫助你調試你的程序。 很多您在可能使用的printf 你的程序的中間圖 哪些變量望其項背。 GDB甚至比printf的更好, 不搞砸了你的代碼,因為你 對可執行文件運行它。 所以我們就去了10個最有幫助 命令你需要GDB,我們很 要繼續練習在一起, 在問題設定了三個超越,你 可以用GDB來幫助調試 您的程序。 最後,我們將介紹一些 排序和查找算法 您在演講看見了,我們是 將實際的代碼,而不只是 偽代碼,但代碼的二進制搜索, 冒泡排序和選擇排序。 因此,首先,我想去 以上的資源。 這是一個廣泛的名單,它的 較小的字體,因為我有很多東西要 適合在這裡。 但這些不僅會幫助你, 再次,與習題集和 你學到了消化信息,但 肯定,來測驗時間,這些都會 說非常有用。 因此,首先,演講筆記。 如果你去cs50.net/lectures和 滾動到特定的星期和日, 你會看到,有註釋為每個 講課,這不是一個簡單的 成績單,而是一個編輯的版本 什麼是覆蓋在講座與代碼 片段和其他有用的花絮。 我強烈建議你對這些。 然後還有,還有源代碼 可從每個講座。 再次,這些幻燈片也將是 可在網上cs50.net/sections 今天晚上。 因此,每個星期第二是短褲的 封面專題,一般為5〜15 分的長度。 而那些希望會給你一個 偉大的底漆上不同的主題。 第三 - 這是全新的這 年 - 是study.cs50.net。 如果你還沒有檢查出來,我 強烈建議您這樣做。 你來挑一個話題。 我們對有幾十個主題。 因此,例如,你選擇的功能。 它給你一些幻燈片 並注意到功能。 這些都是實際的幻燈片,轉錄因子 鼓勵在使用我們的 演示一節。 還有處理的技巧和竅門 與功能,並有 實踐中的問題,幫助 您使用的功能。 我們也給你鏈接到的短 函數和時間,其功能 已經提出了在課堂上。 所以study.cs50.net,全新的這種 今年,一個奇妙的資源。 接下來,我有男人,也就是手動 命令,你可以在運行 命令行。 所以,如果您對任何問題 命令,例如,蘭特,這是我們 部分在上週遭遇 而你在已可能遇到 通過去當你的設置的問題 生成的代碼,但如果你輸入man 蘭特,你會得到的頁面 告訴你所有關於蘭特。 它給你什麼需要時, 它需要的參數,以及返回 類型和簡要說明 那功能。 因此,請檢查蘭特。 它可以是一個有點羅嗦和混亂, 所以有時我覺得 簡單的谷歌搜索什麼我想知道的是 找到答案的最佳途徑。 因此,與谷歌的做法。 獲得良好的谷歌。 它會成為你最好的朋友。 以及谷歌,如果你不能找到它 在谷歌,cs50.net/discuss,它的 討論論壇。 機會是,如果你有一個問題,一是 你的700 +的同齡人也有 問題可能問 它已經在討論 論壇上,並讓它回答。 所以,如果你有一個共同的問題或 您有想一個問題 也許其他人可能碰上, 退房cs50.net/discuss。 最後,最後兩個,如果你想要 跟一個真正的人,辦公室 時間週一至週五。 還有網上辦公時間 延期的學生。 最後但並非最不重要的, 我的驚嘆號。 你們都有我的聯繫方式。 如果你需要什麼,請千萬不要 隨時與我聯繫。 總覺得自由地這樣做。 只有極少數的你加了我的Gchat, 讓一直令人失望, 但我希望那會改變之間 這一點,下一節。 到目前為止,對資源的任何問題嗎? 大。 最後,另一個插頭 反饋,sayat.me/cs50。 你可以給我匿名反饋 關於我是如何做。 那是真正有用的最後一周。 我有一對夫婦的評論從你們 右後部分,再加上從 誰看了其他學生 在一周內,並且它 是難以置信的幫助。 我要嘗試限制我使用 單詞“甜”,但我會告訴我的 熱情和興奮 在其他方面。 但也有其他附加 實質性的反饋, 雙方的長處和三角洲。 所以,請我給你們反饋 關於您的問題集。 隨時給我反饋 在我的教學。 我在這裡給你們。 大。 這就是我對 首節。 沒有任何人有任何 問題這麼遠嗎? 和我有記 控制中心。 擴展學生短信給我 說他們沒有得到任何音訊, 但是這是我的力量來解決的。 所以希望,即得到 短期內得到解決。 如果你正在看在線,喜, 但你聽不到我的聲音。 因此,首先,我們要 要經過GDB。 GDB,因為我暗示較早, 是一個調試工具 比printf的要好得多。 因此開始使用GDB,你們這些傢伙,如果 你要打開你的設備 走,我通過電子郵件發送給您的文件 前面 - 這個文件也將是 可在網上在一個位 - 和運行GDB /文件的名稱。 首先,當然,你必須編譯 文件因為GDB只適用於 可執行文件。 但是,如果你想開始 GDB,你要做的第一件事, 你運行GDB /凱撒。 所以這是我們的程序的名稱 去,現在用它去。 所以我打算寫使凱撒,這 會給我一個可執行文件 在這裡綠色突出。 然後我要去運行GDB /塞薩爾。 和你去。 你看我們有一些文字告訴我 關於廣發行的版本,給我 一些保修信息,然後我們 有國內生產總值提示,這看起來有點 像我們的命令行提示符下, 但是你看它的開放 括號,GDB,密切括號。 在我們繼續之前和調試這個文件 那我給你的一切,讓我們來看看 一些有用的命令,所以我們有一種感覺, 什麼我們要覆蓋。 這些命令列在這裡的 順序我一般使用它們。 所以我通過運行啟動我的程序 該方案的GBD。/名稱, 在這種情況下,愷撒。 然後我首先要做99.9% 的時間類型休息的意思。 ,在主設置一個斷點。 從本質上講,你在做什麼有 是該程序將停止在 主這樣你就可以開始研究它線 按行,而不是運行的所有 一路走過。 可以在不同的點在破 你的代碼,但主要是一個普遍 良好的開端。 下一個命令我跑是跑。 啟動該程序運行,並 如果你需要輸入的命令行 的論點,你運行它的命令。 與參數運行。 這樣以來,我們去那邊的一個版本 C,這是該計劃你們的 寫了PSET 2 - 這其中,當然,有一些錯誤 在它那希望我們會發現 - 我們將用一些命令來運行運行 行參數,因為愷撒, 按問題你們知道 設置規範,需要一些 命令行參數。 在接下來的幾個命令,下一個 一個是實際調用下一個。 那一個你需要一行一行 通過你們的節目。 所以打n,則輸入帶你 行到下一行,執行 上一行。 步驟不僅需要你 下一行,但它 你需要在函數內部。 所以,如果你寫一個函數 你的代碼或者如果您想探索 以我為例,你可以打s和 而不是去的下一行 你正在經歷右邊的文件 現在,你將真正步入 這個函數然後看看它的代碼。 列表顯示,在非常人性化 格式,10行左右左右 您當前所在的代碼 所以實際上你可以看到文件 而不必交換背部和 來回之間不同的看法。 打印是如printf, 顧名思義。 這表明你是什麼一個變量等於。 信息本地人是真正有用的。 這是印刷的特殊版本。 信息當地人告訴你所有的地方的 變量,它們打印全力為您 目前可用。 所以我一般,而不必 打印出來的四個變量,我很 好奇,如果我在一個for循環中,為 舉例來說,我只是寫信息本地人, 它會告訴我什麼我的計數器i 等於,以及我是陣列 工作平等。 最後,繼續。 鍵入中斷停止你 在破發點。 你可以通過走線 旁邊和步線。 繼續運行程序到下一個 突破點,或直至完成,如果 有沒有更多的破發點。 禁用刪除斷點,如果你 決定在主要的突破是 不當之處,你要 設置在別的地方。 最後Q,退出,得到了廣發行。 所以這個程序,/撒,我們將 仔細看看,現在,我們 要使用GDB找 臭蟲此計劃。 我跑這個程序與前面 檢查50,我得到了一個皺眉。 一切它的存在,它編譯的,它 通過大量的試驗,但對於 由於某些原因,它沒有通過第五 測試中,轉向BARFOO,全部大寫,成 E-D-U-R-R,全部大寫, 使用3作為密鑰。 我得到了八九不離十。 我由一個字母下車。 因此,有一些小的失誤在這裡。 我已經通過我的代碼看起來。 我無法弄清楚。 希望你們能幫助我 找出這個bug是。 所以這是我們的錯誤 尋找。 讓我們繼續前進到GDB。 再次,我已經運行GDB /凱撒, 所以現在我們在廣發行。 什麼是第一 我應該做的事情嗎? 我剛剛進入GDB。 有人給我一個很好的 命令進入。 學生:休息為主。 JASON HIRSCHHORN:休息為主。 太棒了。 讓我們鍵入英寸 你們可以在這裡觀看或跟隨 沿著你的電腦上。 打破主,你會看到一個 斷點設定在 - 它給了我一些奇怪的內存地址, 而這也給我的行號。 如果我回頭看這個文件, 我想知道,主 發生在第21行。 我應該怎麼跑下一個? 是我的程序運行? 號 所以,我應該怎麼跑下一個? 學生:運行。 JASON HIRSCHHORN:運行。 如果我只是跑跑步,還是應該 我在添加一些其他的東西? 學生:使用參數運行。 JASON HIRSCHHORN:與運行 命令參數。 而且因為我調試一個非常具體的 情況下,我應該輸入 命令行參數。 所以我會做運行三個,這是,再次, 我從50檢查了輸出。 啟動程序。 我們通過幾行。 現在你會看到,我們是在第21行。 我怎麼知道,我們是在第21行? 因為如果你向左邊看 我的終端窗口中,有 它說21行。 這給了我,其實, 代碼是在第21行。 所以我剛才講錯。 主要是不實際在第21行。 主要是上述21幾行。 但在第21行,這是 我們正在打破。 這行代碼有 尚未執行。 這一點很重要。 你看行不有 尚未執行。 這就是下一行代碼 你即將執行。 所以下一行,因為你們是 可能熟悉,這是 狀態檢查,看看我是否有 輸入的命令行參數。 和A至I,什麼是第二 這樣做的一部分? 什麼是對我? 學生:它更改為一個整數。 JASON HIRSCHHORN:對不起? 學生:它改變了 參數的整數。 JASON HIRSCHHORN:所以一到我的變化ARG 卷從一個字符串為整數。 然後它是什麼檢查? 學生:如果有一個第二 命令行參數,除了 運行該程序。 JASON HIRSCHHORN:什麼是 在此第二半 布爾表達式檢查? 這部分在這裡,一來我? 學生:如果是負數。 JASON HIRSCHHORN:確保什麼? 學生:確保它 是,實際上正。 JASON HIRSCHHORN:沒錯。 這被檢查,看它是否 負的,而如果它是負的,我 有一種感覺,下一行可能 被我罵的用戶。 因此,讓我們打結束時執行這條線。 我們沒有看到該行的你們 也許期望看到大喊大叫的 用戶再回來,因為 這一行沒有執行。 我進入3。 所以,我沒有,事實上,輸入兩個命令 行參數,和3 大於零。 所以,我們看到那行,我們執行, 但我們沒踩 裡面的if條件。 所以,現在,未來,我看到我設置 整型鍵等於給我精氨酸卷。 所以這是我創建一個可變密鑰。 所以,如果我打印出來的關鍵,現在,因為 這可以讓你看到的 值裡面的變量, 關鍵等於47。 這是奇怪的,但當然, 那是因為我沒有 執行該行呢。 所以,現在如果我打了N,執行該行, 並做打印鍵,鍵將等於3, 這是我們期望它等於。 如此反复,在廣發行,行啦 看你有沒有執行。 你必須打N或S或數字 其他命令來實際的 執行該行。 打印鍵。 關鍵的第3。 到目前為止,一切都很好。 String是純文本。 讓我們來執行該行。 我是從用戶得到的字符串。 讓我們在我入住50看,我 進入BARFOO全部大寫,所以 這就是我進入。 如果我現在打印純文本。 你會看到它等於一個字符串。 它給了我一些其他怪異的十六進制 數,但它在 其實說我的字符串是BARFOO。 如果我想看看什麼鍵相當於在 這點,我怎麼可以檢查關鍵? 學生:打印鍵。 JASON HIRSCHHORN:Print鍵,沒錯。 而實際上,有一個快捷方式。 如果你厭倦了打字印刷的, 你可以只輸入p。 所以,p鍵做同樣的事情。 又一次,我看到它等於3。 如果我想找出什麼兩大關鍵 和BARFOO相當於在同一時間 但我累了打字每 一出單獨,我 可以輸入信息本地人。 這給了我鑰匙等於3。 純文本等於BARFOO。 這也給了我這兩個奇怪的事情 在頂部,該變量i和 這個變量n。 這些都是實際存在的 在我的主程序。 我們還沒有遇到過他們呢, 但作為預覽,那些 存在於我的for循環。 所以現在,他們平等有些怪異 數字,因為他們沒有被 初始化還沒有,但它們仍然存在 在內存中,所以他們只是設置 一些垃圾值。 但是我們看到在關鍵平原 文字在那裡。 所以,我要執行這條線, 第34行,for循環。 我們要跳進 for循環擊中ñ。 而且我們內部的for循環。 我們是在我們的第一次檢查。 再次,這些都應該有點期待 你熟悉的,因為這是一個 寫凱撒程序,但 再次,有一些類型的錯誤。 現在如果我做信息本地人,因為我 裡面的那個for循環,你會看到 我等於零,正如我們期望的那樣。 這就是我們將其設置為和初始化 它在for循環。 n等於6。 這也有道理,因為我們設置 它以純文本的strlen的。 所以我喜歡做信息本地人或打印 到變量經常以確保 一切總是什麼 我希望它等於。 在這種情況下,一切都 我希望它等於。 因此,讓我們開始通過移動 這個for循環。 我上線是36行,如果純 文字i大於一個樸素 文本i小於或等於z。 我知道我的問題是不是與我的第一次 信中,它與第二個字母。 如果我們回頭看檢查 50,B進入到E的罰款。 我要帶A和把它當作 一個A,而不是將其更改為D。所以, 什麼是錯的 第二個字母。 所以,我要動 在第二那裡。 但是,如果我沒有想檢查什麼純 文字我等於在這個特殊的 情況下,我覺得應該是什麼? 我應該明文等於我在這 通過第一輪的循環? 學生:零? JASON HIRSCHHORN:我純文本? 所以它應該是資本B的我,當然, 為零,但純文本 支架零閉合支架等於乙 因為字符串,如我們上週看到的, 是數組,所以我們得到的 第一個字符從。 所以,再一次,如果我打印出來的純文本 我,我,其實得到的字符 B.這就是整齊的,對不對? 我實際上並沒有明文一 這不是我設置的變量之一 或初始化,但你可以打印 出了事情一大堆 如果你想。 但是,讓我們移動。 如果純文本我是和大於 明文I小於或等於 Z,這顯然是正確的,因為我們有 資本B.我要去跑 它的一些命令。 我們看到,數學最後一周,所以我們將 想當然,它的工作原理 根據權利檢查50。 這些大括號,第一個 結果顯示,我是退出,如果 條件,第二個顯示 那我退出for循環。 所以現在當我打接下來,我們將看到 我們回來在for循環一次。 我們正在經歷的 再次循環。 讓我們真正步入第二 迭代的for循環和類型 信息本地人。 所以我們在第二次迭代 我們的for循環。 我等於1,這是我們期望的。 N等於6,而我們預期。 關鍵等於3,這是我們期望的。 和純文本,你會看到,等於 EARFOO現在,沒有BARFOO了,因為 在我們先前的迭代中,B為 改為大寫E。所以我們即將 遇到的問題,所以這 在這裡我們要 潛入調試。 但是,沒有任何人有任何問題 關於我們到目前為止已經做了什麼? 太棒了。 所以我們一下,如果執行此 條件下,純文本支架我關閉 比A和支架更大的純文本我 小於或等於Z。但在此之前 我進入了,因為這是 我知道我的錯誤,我想點 出一的純文本,以便 讓我們把打印出來。 它等於字符A,使 似乎到目前為止,一切都很好,不錯。 所以我希望我的每邏輯這條線, 這條線應該是真實的。 這是一個大寫字母。 但如果我打了N,我們要明白,這個 行,其實並沒有執行。 我跳進來的東西,如果。 為什麼會這樣? 學生:因為你有你的條件 純文本的大 比A,不等於或大於。 JASON HIRSCHHORN:所以我有我的純文本 我大於A,不大於 小於或等於。 所以很明顯,資本A沒有 如果條件觸發這一點,我們做 沒有踏進去,和我們做 沒有做必要的轉變。 所以這是它,其實。 我想通了,我的錯誤。 我可以回去在我的源文件, 改變它,更新它, 運行再次檢查50。 但我們會看到,只是為了教學的 的緣故,如果我堅持去做。 本否則,如果不執行下去,但 什麼,而不是等於就是命令 不改變。 所以它沒有改變,如果我 這裡打印純文本,我們會看到去 通過for循環沒有,事實上, 改變第二個字符的。 它仍然是一個大寫字母A。 所以,再一次,我們調試我們的錯誤。 我們意識到有 一些邏輯缺失。 和我們之前調試它的時間提前 實際執行這條線, 但你會注意到有我們只是 點擊Next,並跳轉到否則,如果, 這意味著,如果條件 是不正確的。 我們沒有,事實上,獲得 結果我們的預期。 這樣的話,我們可能已經提示,有 我們沒有這麼精明,看 如果條件和檢查的話,其實, 我們的條件應計算為 真正在目前情況下。 這是所有用於調試這個程序。 沒有任何人有任何問題嗎? 我可以打什麼命令退出GDB? 問:然後我就被提示, 退出呢? 是或否。 我會打,是的,我會相繼退出GDB。 所以這是一個快速入門到GDB。 實際上,在實際情況下, 我這樣做是在辦公時間。 我GDBed在這個確切的程序 辦公時間與學生。 如果我們回去,我們看到的命令 之前,我們使用了破發主力,第一 的事情,我們做到了。 我們使用命令行參數運行, 第二件事情,我們做到了。 接下來,我們用了很多移動 我們通過線。 再次,短版 旁為n。 這是在括號 在灰色的幻燈片。 我們沒有使用的步驟,但是我們並沒有 一定需要這種情況。 但是,我們可能會在稍後使用它 今天,如果我們正在調試,為 例如,二進制搜索二進制時 搜索被稱為在一個單獨的 的功能,但有 與它的一些錯誤。 我們將要步入 調用二進制搜索和 實際調試它。 列表中,我們沒有使用或者是因為我們有 我們的代碼感好,但如果我 沒有想要得到的是什麼代碼,我感 在旁邊,我可以只使用列表中。 打印我們使用,我們使用信息的當地人。 繼續我們並不需要在此使用 情況下,我們也沒有需要使用 禁用的,但我們確實使用了退出。 同樣,這些10的命令, 實踐它們。 如果你了解這10個命令, 你應該調試任何設置 發用GDB。 所以我們馬上就要去上,再次向 部分的癥結今天,去了 這些排序和搜索 算法。 在這樣做之前,再次,有任何疑問, 意見,關注的廣發行? 所以大家是要使用 GDB而不是printf的? 所以每個人都為永久的緣故, 大家都點頭他們的頭向右 現在,我會看到你在辦公時間 和所有的轉錄因子會看到你和 他們會說,告訴我怎麼用 GDB,你就可以 向他們展示,對不對? 樣的? 也許有希望。 涼爽。 所以,我們要進入 排序和搜索。 你會看到我已經排序的列表 對我們來說,但不會 是這種情況總是如此。 所以在問題設置規範 問題設定了三個,你有短褲 你可以看,它實際上 請你看看那些短褲。 此外,在演講最後一周,我們走過去 很多這樣的算法,所以我 不會花時間在課堂上會 一遍這些算法或圖紙 圖片,如何將這些 算法工作。 同樣,這些信息您可以重新手錶 講座中,或者該信息 被捕獲出色的短褲 對於這些搜索所有的, 這可在cs50.net。 所以,我們要去什麼 要做的就是編寫這些程序。 我們有一個感覺,一個心智模式如何, 他們的工作,還等什麼,我們要去 要做的就是對它們進行編碼真實的。 我們打算把這一心智模式, 那張照片,如果你願意,進 實際代碼。 如果你是一個有點困惑或 朦朧的心智模式,我完全 明白了。 我們不會實際去 跳轉到代碼通俗易懂。 因此,儘管這個提示在這張幻燈片問 你的代碼的二進制搜索,並 實際上,一個迭代版本 二進制搜索,第一件事我 真的希望你做的是 寫一些偽代碼。 所以,你有這個心理模型 如何二進制搜索作品。 拿出一張紙,如果你有 1一應俱全,或者打開一個 文本編輯器,我想 大家都來寫。 連拿4分寫 偽代碼二進制​​搜索。 再次,想想心理模型。 我會回來的,如果你有任何問題 我們可以得出的圖片出來。 但首先,我們開始編程之前, 我想要寫 偽代碼的二進制搜索,所以當我們 潛水,我們有一些方向 的地方,我們應該前往。 學生:我們是否可以假設數組 我們得到的值已經排序? JASON HIRSCHHORN:所以對於二進制搜索 工作 - 優秀的問題 - 你 必須採取以排序 數組值。 所以,假設它會奏效。 我們將回到這個幻燈片。 紫色的功能,你會看到 聲明布爾整型binary_search的 值,int值,詮釋n。 這應該看起來很熟悉,如果你已經 已經接近或得到你 手臟與習題集。 但是,這是你的函數聲明。 再次,應該不需要擔心 這麼多在這一刻。 我真的希望你做的是採取 四分鐘的偽代碼的二進制 搜索,然後我們就去 以上,作為一個組。 我會來到我身邊。 如果您有任何疑問,請隨時 自由地舉起你的手。 你為什麼不走兩分鐘 完成了偽碼? 我知道這可能看起來荒謬的, 我們花那麼多時間 東西甚至不是真正的 C,但尤其是對於這些更 具有挑戰性的算法和問題 集,我們要搞清楚, 開始在偽不擔心 有關語法,只是擔心 邏輯,是難以置信的幫助。 而這樣一來,你不求解兩個 令人難以置信的困難問題一次。 你只是專注於邏輯, 然後你進入的語法。 確定。 讓我們開始經歷 偽代碼。 我已經寫在這裡,二進制 搜索偽代碼。 我們會寫這篇文章的上 登上在一起。 或者我會寫它,你會得到 我我需要的提示。 所以,有誰能夠給我的第一個 偽代碼的行,你 寫了二進制搜索? 是的,安妮? 學生:雖然的長度 列表是大於零。 JASON HIRSCHHORN:雖然長度 的商大於零。 又一次,我們看到一些C的前瞻性 在這裡語法的東西。 但大部分是英文的。 有沒有人有他們提出的任何行 在此之前他們的偽代碼? 學生:獲得一個數組 的分類數字。 JASON HIRSCHHORN:你寫了“得到一個 數組排序的數字。“每 函數的聲明,我們將通過 排序的數字的陣列。 學生:[聽不清]。 JASON HIRSCHHORN:所以 我們將具有。 但是,是的,如果我們沒有,我們 就需要我們對數組進行排序 數字,因為二進制搜索 僅適用於排序數組。 因此,儘管列表的長度為零,我 打算把一些大括號 使它看起來更有點像 C.但同時,似乎映射到 while循環,所以這裡面,而 循環什麼,我們需要 做二進制搜索? 別人誰沒有給我一個 但回答卻是誰寫的呢? 學生:到列表的中間。 JASON HIRSCHHORN:湯姆。 轉到列表的中間。 和後續的問題,什麼 我們做一次,我們在 列表中的中間? 學生:做一個檢查這是否是 你要找的數量。 JASON HIRSCHHORN:優秀。 走在列表的中間,並檢查 如果我們的價值在那裡 - 太棒了。 沒有任何人有任何東西 這是比這有什麼不同? 這是完全正確的。 我們在做二進制搜索的第一件事 被轉到列表的中間, 檢查,看看是否我們的價值是存在的。 所以我想,如果我們的價值 在那裡,我們該怎麼做? 學生:我們回到零[聽不清]。 JASON HIRSCHHORN:是啊,如果我們的 價值是存在的,我們發現它。 因此,我們可以不過告訴某種程度上,這 函數的定義,我們告訴用戶 我們發現它。 如果它不存在,雖然,這是 這哪裡得到棘手。 所以,如果它不存在,別人誰 正在對二進制搜索或 有一個想法,現在,我們該怎麼做? 學生:問題。 JASON HIRSCHHORN:怎麼了? 學生:是的數組已經排序? JASON HIRSCHHORN:是的,我們假設 該數組已經排序。 學生:所以,你必須檢查 你看到的值大於 你想要的值,你可以移動 到另一半的中間。 JASON HIRSCHHORN:所以,如果中間 清單大於我們在做什麼 尋找,然後我們做什麼? 我們謹在哪裡? 學生:你想要移動到 列表中的與半 數字低於。 JASON HIRSCHHORN:所以我們會 調用的左側。 因此,如果中間是更大的,我們可以搜索 列表的左邊一半。 然後通過搜索什麼 我的意思是搜索? 學生:[聽不清]。 JASON HIRSCHHORN:我們去中間。 事實上,我們重複這件事情。 我們回去通過我們的while循環。 我給你最後一個 - 否則,如果中間是少了什麼 我們做什麼,我們該怎麼做嗎? 學生:你可以向右邊。 JASON HIRSCHHORN:搜索的權利。 這看起來不錯,但沒有任何人有 任何事情,我們可能會丟失或 別的,你把 在你的偽代碼? 所以,這就是我們有這麼遠。 而該列表的長度大 大於零,我們打算去 到列表中的中間和 檢查我們的價值是存在的。 如果中間大,我們要 搜索離開,否則,如果中間是 少,我們要搜索的權利。 所以,我們都不得不與一些熟悉 我們在計算機科學使用條款 和工具,我們有。 但你已經注意到我們 講英文,但我們發現了一個 很多事情,似乎在映射到 我們已經在我們的編碼工具包工具。 於是馬上蝙蝠,我們不是 將實際的代碼呢。 我們看到了什麼英文在這裡,圖 上的東西,我們可以用C寫的? 學生:雖然。 JASON HIRSCHHORN:雖然。 因此,這同時就在這裡 地圖上的是什麼? 學生:一個while循環。 JASON HIRSCHHORN:一個while循環? 或可能更一般地,一個循環。 我們想要做的事情一遍又一遍。 所以我們要編寫一個循環。 而我們已經知道了,因為我們已經做了 這幾次我們 有大量的例子擺在那裡, 其實怎麼寫 該指數為一個循環。 所以這應該是相當容易的。 我們應該能夠得到 啟動很快。 還有什麼我們在這裡看到了什麼? 還有什麼其他的結構語法,事情 我們熟悉C語言,我們做 已經有一個基於感 關閉我們所用的字眼? 是的,安娜? [聽不清] 只是在開玩笑。 安娜,勇往直前。 學生:如果和其他人。 JASON HIRSCHHORN:如果和 否則 - 就在這裡。 那麼,做那些樣子? 學生:一個if else語句。 JASON HIRSCHHORN:是啊, 條件,對不對? 因此,我們可能會需要 寫一些條件。 再次,雖然也許在混亂 首先,我們一般有一種感覺,現在 如何寫條件和 語法條件。 如果我們不這樣做,我們只是查查 語法條件下,剪切和粘貼 如此,因為我們知道我們 在這裡需要一個條件。 我們看到,地圖上的任何其他事情 事情,我們可能需要做C語言? 是啊,Aleha? 學生:這可能是顯而易見的, 通過只檢查,如果一個 值等於什麼。 JASON HIRSCHHORN:那麼我們該如何檢查 和 - 所以去到列表的中間 並檢查我們的價值在那裡? 我們怎麼做,在C? 什麼是語法是什麼? 學生:等於,等於。 JASON HIRSCHHORN:等於,等於。 所以,這個檢查很可能會 是一種平等的,平等的。 所以我們知道我們需要在某個地方。 而實際上,只是在寫它, 我們看到其他的事情。 我們將不得不做一些 比較操作符在那裡 - 太棒了。 因此,它實際上看起來像,並通過 大,我們還沒有寫一個 C代碼字呢。 但我們得到的心智模式下來 通過講座和那些短褲。 我們寫的偽代碼為一組。 而且,我們已經有80%,如果不 90%的是我們需要做的。 現在,我們只需要編寫 它,這又是一個 非平凡的問題要解決。 但至少我們堅持的邏輯。 至少現在,當我們去到上班時間, 我可以說,我知道我需要什麼 這樣做,但你可以提醒 語法我嗎? 或者即使上班時間都擠,你 可以為谷歌的語法,而 不是被卡住的邏輯。 再次,而不是試圖解決 邏輯和語法問題都 一次,它往往是要好得多 破解這兩個難題扎進 2更易於管理的和做的 偽代碼在C中,然後再代碼 因此,讓我們看看我做的 偽代碼的時間提前。 而該列表的長度大 大於零,看中間 的列表。 如果發現號返回true,否則 如果數值越高,搜索左。 否則,如果數量少,搜索 右,返回false。 這樣,看起來幾乎一模一樣,如果不 幾乎相同,我們寫了。 事實上,湯姆,你先說什麼, 斷,如果在列表中,中間 發現成兩個語句數 其實是我做了什麼。 我結合他們那裡。 我應該聽 你的第一次。 所以這是偽代碼,我們有。 如果你想現在,對不起,請 回到我們最初的問題。 讓我們的代碼binary.c。 因此,實現一個迭代版本的 使用下面的二進制搜索 函數聲明。 而且你也不需要複製 下來,只是還沒有。 實際上,我要去開 右上這裡binary.c。 因此,有函數聲明 在屏幕的中間。 你會看到我拿著偽代碼 從我的兩側,但幾乎是相同的 什麼,我們寫的, 把在為你。 所以,現在,讓我們花五分鐘 編寫這個函數。 再次,如果您有任何疑問, 舉起你的手,讓我知道,我會 來到我身邊。 學生:[聽不清]。 JASON HIRSCHHORN:所以我把二進制 在定義搜索 頂,上線12。 這就是我為我的幻燈片。 然後這一切的偽代碼,我只是 複製並從滑動粘貼 偽代碼的幻燈片。 我仍然不聽[聽不清]。 所以,如果你已經完成了你的 實現,我要檢查它。 我發郵件給你的helpers.h文件 在前面這個類。 這將是在網上以及 下載的人看 本節的時間延遲。 而我只是用一般的分佈 從pset3代碼。 所以我把find.C,用我的helpers.h文件 而非helpers.h文件 這是由於在分配碼。 我不得不做出一個其他變動 find.C而不是調用只是簡單地 搜索,調用binary_search的。 所以,如果你想測試你的代碼, 知道這是如何做到這一點。 事實上,當我們將執行這個代碼 現在,我只是做副本 我pset3目錄,再次換出 傭工文件,然後作出 在find.C改變binary_search的調用 而不是簡單的搜索。 JASON HIRSCHHORN:是的。 你有問題嗎? 學生:沒關係。 JASON HIRSCHHORN:不用擔心。 好吧,讓我們開始吧。 我們將編寫此為一組。 另外一個說明。 再次,這是,可以很容易地進行交換 在對習題集三。 我有我的helpers.h文件,該文件,而 比helpers.h我們給出, 聲明二進制搜索,泡 排序和選擇排序。 而在find.c你會發現就行, 那是什麼,第68行,我們稱之為二進制 搜索,而不是搜索。 所以,再一次,這是可用的代碼 在網上,或者您是代碼 創建現在可以很容易地交換 在對p設置3進行檢查。 但首先,讓我們來編碼二進制搜索。 我們的函數聲明, 我們返回一個布爾值。 我們採取所謂的整數。 我們以一個整數數組稱為 價值觀,我們取n是 該數組的大小。 在第10行,就在這裡,我有 犀利包括stdbool.h。 有誰知道為什麼會在那裡? 那麼,這行代碼呢? 學生:它可以讓你 使用一個bool返回類型。 JASON HIRSCHHORN:沒錯。 學生:或者它是一個庫,它允許 使用一個bool返回類型。 JASON HIRSCHHORN:那麼尖銳包括 stdbool.h行給了我一些 定義和聲明的東西 那我可以使用 這個庫。 因此,在那些被說有 這種類型被稱為布爾,並且它可以是 真的還是假的。 所以,這就是該行做。 如果我沒有那行,我會 惹上麻煩寫這 字就在這裡,布爾,在那裡。 完全正確。 所以我需要在這個代碼。 確定。 所以這再一次是一個迭代 版本,而不是遞歸1。 因此,讓我們開始吧。 讓我們開始這第一 線的偽代碼。 並希望,我們會 - 或沒有希望。 我們要繞過去了房間。 我們會去一行一行的,我會幫助 你弄清楚,我們需要的行 先寫。 因此,儘管名單的長度 大於零。 讓我們開始在前面。 我應該寫什麼線 在這裡,在代碼中? 學生:雖然括號 n為大於0。 JASON HIRSCHHORN:雖然 n是偉大大於0。 因此n是一個列表的大小, 我們正在檢查,如果 - [插VOICES] JASON HIRSCHHORN: - 對不起? 學生:我們如何知道 n是列表的大小? JASON HIRSCHHORN:對不起。 每pset的規範,搜索 和排序功能,你需要寫, n是該列表的大小。 我忘了解釋這一點。 但肯定的。 n為的大小 的列表中,在這種情況下。 所以,當n大於0。 確定。 這可能證明是有點問題 不過,如果事情繼續下去。 因為我們將繼續了解 列表的大小在整個 功能,但說我們開始 與由5個整數的數組。 我們通過和我們已經 現在把範圍縮小到 2個整數的數組。 這2個整數是什麼? 大小為2,現在我們要 看,但2是什麼? 這是否有意義,這問題嗎? 確定。 我會再問吧。 因此,我們用5這個​​數組開始 整數,n等於5,對不對? 我們將通過這裡運行。 我們可能會改變大小, 權利,繼續發展下去。 這就是我們說我們想做的事情。 我們不希望搜索 完整的東西了。 所以說,我們將其更改為2。 我們把一半的任務列表,奇怪。 所以,隨便挑2。 所以,現在n等於2。 我為窮人道歉 幹擦標記。 對不對? 我們正在尋找通過列表 再次用大小為2的列表。 那麼,我們的數組的大小是5還是。 我們說,我們只是想 搜索2點在裡面。 因此,這2點是那些? 這是否有道理? 他們是左2點? 他們是正確的2點? 是他們中間的2點? 我們已經分手了問題了,我們卻 居然不知道其中的一部分 我們仍然在尋找這個問題, 只是通過讓這些2變量。 因此,我們需要多一點的話, 而n為大於0。 我們需要知道在哪裡 n是在我們實際的數組。 所以,沒有任何人有一個 改變這條直線? 大多數這條線是 完全正確的。 難道還有其他的另外? 我們可以交換的東西出來n到 使這條線好一點? 嗯? 學生:你能初始化變量 像長度為n的會被用來 在後面的功能? JASON HIRSCHHORN:所以初始化 可變長度為n, 我們使用以後呢? 但是,我們剛剛更新的長度和我們 仍然會碰到這個問題,我們 減少我們的問題的長度, 但我們永遠不知道,其實, 該長度映射到。 學生:是不是要發生 以後當你說,搜索左, 搜索吧? 你會去一個不同的 您的區域 - JASON HIRSCHHORN:我們打算去 一個地區,但我們怎麼知道 這是去? 如果我們只有數組,這 N,我們怎麼知道在哪裡 到陣列中。 在後面,是嗎? 學生:你有一樣,較低的 界和上界變量或 類似的東西? JASON HIRSCHHORN:確定。 所以這是另一種思路。 而不是僅僅跟踪的 大小,我們保持了較低的軌道, 上界變量。 那麼,我們如何計算從大小 下限和上限? [插VOICES] JASON HIRSCHHORN:減法。 並且還保持跟踪的下 綁定和上界,讓我們知道, 我們正在尋找這兩個? 難道我們尋找這兩個在這裡? 我們正在尋找中間的兩個? 也許不是中間的兩個,因為 這一點,其實是二進制搜索。 但是,現在我們就可以得到大小, 而且該陣列的界限。 從本質上講,如果我們有我們的巨人 電話簿,我們撕成兩半。 我們現在知道,較小的 電話簿。 但我們實際上並不翻錄 電話簿的一半。 我們還需要知道在哪裡 我們的問題的新範圍是。 沒有任何人有任何疑問, 有關? 是嗎? 學生:它會通過創建工作 變量i,你然後就轉移 我相對於它的位置 當前位置,並且長度中,n? JASON HIRSCHHORN:什麼是我? 學生:就像我是喜歡那種 - 就像你會初始化我是 陣列的中間位置。 然後,如果在位置i的值在 在陣列的發現中間 低於您所需要的價值,我現在 成為該陣列的長度,加上 i的值除以2。 像,看,你轉向我 - JASON HIRSCHHORN:對。 學生: - 到 - JASON HIRSCHHORN:所以我幾乎 正面,將工作。 但問題是,你需要兩個 件的信息在這裡。 您可以用開頭和結尾做, 或者你可以用大小做,然後 一些標記。 但你需要兩件 此處的信息。 你不能用只有一個。 這是否有道理? 所以,我們要通過,並 我們要做的[聽不清] 並創建一些標記。 所以,你在你的代碼寫的什麼了? 學生:我剛才說的整型界 1等於0。 JASON HIRSCHHORN:讓我們把 這個int,開始。 學生:確定。 JASON HIRSCHHORN:這使得 更有意義對我來說。 和? 學生:我說,我猜,廉政結束。 JASON HIRSCHHORN:INT結束。 學生:我猜,N減1, 或者類似的東西。 像,最後一個元素。 JASON HIRSCHHORN:所以你寫,詮釋 開始等於0,分號和INT 結局等於n,減去1,分號。 所以基本上,我們在做什麼 這裡,0的第一個位置。 正如我們所知道的陣列,他們不走 最多n,它們上升到n減去1。 因此,我們有我們的數組的一些界限。 而這些初始範圍恰好是 我們的問題的初始邊界。 確定。 所以這聽起來不錯。 然後,如果我們再回到這一行,而 列表的長度是大於0, 什麼,而不是n,應 我們擺在這裡? 學生:寫結束減去開始。 JASON HIRSCHHORN:雖然結束負 開始是大於0? 確定。 我們可以,如果我們想 做一個更好一點,有什麼 我們還能做什麼? 如果我們想要清理 這段代碼了一點? 我們怎樣才能擺脫0? 這僅僅是一個風格問題。 這是正確的現在。 學生:期末不 等於開始? JASON HIRSCHHORN:我們可以做什麼呢? [插VOICES] 學生:期末更大? JASON HIRSCHHORN:是啊。 我們可以在剛剛結束的做 大於開始。 右。 我們增加了開始的另一邊 那,我們擺脫了0。 因此,這只是看起來 點點清潔劑。 確定。 因此,儘管名單的長度為0,我們寫 ,雖然結局是更大 比開始。 我們打算把我們的需要 大括號,然後第一件事 我們想要做的是看 他們在一個小列表。 你呢? 你可以給我 - 學生:如果括號 價值括號 - JASON HIRSCHHORN:如果括號 值的方括號。 學生:結束除以2。 JASON HIRSCHHORN:結束? 學生:我看到你的一個問題 - JASON HIRSCHHORN:確定。 好吧,看在中間。 我們怎麼知道中間是什麼? 是啊。 因此,讓我刪除那些代碼。 我們怎麼知道中間是什麼? 在任何事情,當你有初 而最終,你怎麼找到 中間? 學生:你平均。 學生:你將它們添加 在一起,然後 - JASON HIRSCHHORN:加入他們 在一起,然後? 學生:你平均。 除以2。 JASON HIRSCHHORN:加入他們 在一起,除以2。 所以整型中間等於? 湯姆,你可以把它送給我嗎? 學生:期初加期末 - JASON HIRSCHHORN:開始 加上結束。 學生:全部,支架,除以2。 JASON HIRSCHHORN:所有在括號, 除以2。 所以,讓我中間 任何事物,正確嗎? 學生:你還需要它向上舍入。 JASON HIRSCHHORN:你這是什麼 意思是,我需要它向上舍入? [插VOICES] 學生:因為,如果這是一個奇怪的 號碼,然後它就像 - JASON HIRSCHHORN:嗯,好吧。 這樣我就可以把它向上舍。 但如果它是奇數,5,我可以 服用1遠離中間。 或者,如果它是偶數,相反, 這是一個更好的情況。 如果是4,我們只有4,我可以帶 第一個“中間”,報價,引文或 第二個“中間”之一。 要么將工作二進制搜索, 所以我實際上並不需要圓形的。 但有一件事我 需要看看這條線。 我們可能沒有意識到這一點, 但我們會回來的。 因為這條線實際上仍然 需要一件事。 但到目前為止,我們已經寫了 四行代碼。 我們已經得到了我們的開始 和結束標記。 我們有我們的while循環,它映射 對直接向我們的偽代碼。 我們正在尋找一個映射中間 直接到我們的偽代碼。 我會說這正好到中間 名單,這行代碼。 然後,一旦我們去的中間 在列表中,我們需要做的下一件事 被檢查,如果我們的價值如何, 偽代碼,我們之前寫的。 那麼我們該如何檢查,如果我們的價值 在列表的中間? 您。 你為什麼不這樣做呢? 學生:如果我們的價值的是 在中間是等於 無論我們設定 - 我的意思是等於等於 - JASON HIRSCHHORN:它 - 確定。 學生:我不知道是什麼 變量,我們正在尋找 因為雖然,是因為 - [插VOICES] 學生:[聽不清]。 JASON HIRSCHHORN:沒錯。 每個函數的聲明, 我們正在尋找一個值。 所以,我們正在尋找一個值 在值的數組。 所以你完全正確。 你會做,如果開放的括號值支架 中間閉合支架等號 等於價值,裡面有 什麼我們需要做什麼? 如果我們的價值的存在,是什麼 我們需要做什麼? [插VOICES] 學生:返回零。 JASON HIRSCHHORN:返回true。 學生:返回true。 JASON HIRSCHHORN:邁克爾, 這是什麼線路呢? 學生:[聽不清]程序已經運行 它的路線,那就是結束了, 你已經什麼你需要做什麼? JASON HIRSCHHORN:程序還是什麼? 在這種情況下? 學生:該功能。 JASON HIRSCHHORN:該功能。 因此,要返回到任何所謂的 它並給它的價值,真正的。 完全正確。 主。 什麼是返回類型 主,邁克爾? 學生:整型,整型? JASON HIRSCHHORN:整型,沒錯。 一個整數。 這僅僅是一個問題,以確保 你們已經在它的上面。 這是什麼通常會返回,如果 所有的東西都運作良好? 學生:零。 JASON HIRSCHHORN:零。 完全正確。 學生:如果這只是返回true, 沒有信息報錯 關於什麼的 - 呵呵,這只是說了 值的數組裡面。 JASON HIRSCHHORN:沒錯。 這個程序沒有提供資料 的確切位置值。 它只是說,是的,我們發現 它,或者沒有,我們沒有發現它。 所以,如果發現號,返回true。 嗯,其實我們只是做了真正 迅速與一行代碼。 因此,我將動議該行偽代碼的。 學生:不,我們需要 改變數組? 它應該是值,而不是價值,對不對? JASON HIRSCHHORN:對不起。 謝謝。 學生:是啊。 JASON HIRSCHHORN:此行 應該是價值觀。 完全正確。 確定。 因此,我們已經看了看中間列表。 如果發現號返回true。 我們的偽代碼繼續,如果 中間是更大的,搜索就走了。 所以,我在這裡,如果數 更高,搜索就走了。 康斯坦丁,你可以給 我這行代碼? 學生:如果中間值 - JASON HIRSCHHORN:所以,如果值 - 如果開括號值支架 中間靠近支架 - 學生:是不是值小? JASON HIRSCHHORN:是小於。 學生:比價值減。 JASON HIRSCHHORN:值。 嗯,其實,你要 檢查數量 - 抱歉。 這是一個有點混亂。 但如果其他的數 名單的中間是更大的。 學生:哦,好吧。 JASON HIRSCHHORN:我會改變這種狀況。 否則,如果中間是較高的,我們 要搜索左,好不好? 而我們該怎麼做內部 這一點,如果條件? 學生:我可以做一個小改動 的情況下,如果將其更改為別的嗎? JASON HIRSCHHORN:否則,如果? 確定。 所以這段代碼將執行 大致相同。 但是如果左右,其他使用好處 如果,否則,如果還是如果,否則,如果,否則 也就是說,只有其中的一個是要 進行檢查,而不是他們三個, 可能。 這使得它一點點 電腦這是上更好 運行你的程序。 所以,[?康斯坦丁?] 我們這一行裡面,否則,如果值, 支架中間右方括號 大於價值。 什麼是我們需要做什麼? 我們需要搜索的左側。 我們該怎麼做呢? 我想給你一個開始。 我們有這兩樣東西叫 開始和結束。 因此,需要做些什麼 要開始? 如果您要搜索的左邊 列表中,我們得到我們當前開始的。 我們需要什麼做的呢? 學生:我們設置開始 到中間加1。 JASON HIRSCHHORN:所以,如果我們 尋找左側? 學生:對不起,中間減去 - 這樣的結局會是中間 減1和開始 - JASON HIRSCHHORN:什麼 碰巧的開始? 學生:它保持不變。 JASON HIRSCHHORN:所以 含義保持不變。 如果我們在搜索的左邊,我們 使用相同的開頭 - 完全正確。 而故事的結局? 對不起,什麼是 再次結束平等的嗎? 學生:中減去1。 JASON HIRSCHHORN:中減去1。 現在,為什麼減1,不只是中間? 學生:中間是出 圖片已經,因為我們有 檢查它的呢? JASON HIRSCHHORN:這是 完全正確。 中間是出來的圖片。 我們已經檢查了中間。 所以,我們不希望“中間,”報價 引文結束後,繼續在該 數組,我們正在尋找。 因此,這是夢幻般的。 否則,如果值支架中間是更大 比值等於結束 中間減1。 傑夫,你看這個最後一行? 學生:否則。 中間值小於值? JASON HIRSCHHORN:我們會 你給我的東西。 所以,如果你不給我 - 學生:所以後來開始 將中間加1。 JASON HIRSCHHORN:平等開始 中間加1,再一次,對於相同的 原因是君士坦丁 給了我們前面。 並在最後,誰沒有給 我的代碼行了嗎? 返回false,Aleha什麼 我們寫在這裡? 學生:返回false。 JASON HIRSCHHORN:返回false。 而我們需要做的,因為如果我們 並不覺得,我們需要說我們 沒有發現它。 和我們說我們要返回一個 布爾,所以我們肯定是要返回 一個bool地方。 因此,讓我們運行此代碼。 實際上,我要 - 所以我們在終端。 我們將清除我們的窗口。 讓我們把所有的。 我們發現有一個錯誤。 還有第15行錯誤,預期 分號的結束 聲明。 所以,我怎麼忘了? 學生:分號。 JASON HIRSCHHORN:分號 直到這裡。 我認為這是湯姆的代碼。 因此,湯姆,[聽不清]。 只是在開玩笑。 讓我們做所有的再製作。 學生:什麼Dropbox的目錄 我們應該在這? JASON HIRSCHHORN:所以,你可以 只是看這一點。 但同樣,如果你​​想提出這個 代碼到您的pset3目錄試試 出來,這就是我所做的。 如果你會發現在這裡 - 對不起,很好的問題。 [? LS,?] 我在這裡find.c代碼 從本週的發行版的代碼。 我有helpers.h。 我有一個Make文件我實際上是 編輯了一下,包括這些新 我們正在編寫的文件。 所有這些代碼將是可用的,不 分配的代碼,但新 製作文件,新helpers.h文件將 是下載在網上提供。 同樣地,所以這些都是在 額外的代碼,我們有。 因此,請所有,每本線,使得查找, 二,泡選擇 - 品牌 他們三個都和編譯成 這個可執行文件代碼中找到。 所以一般情況下,我們不希望 直到check50。 我們要對我們自己運行一些測試。 但是,僅僅如此可加快我們這一點, check50 2013 pset3.find將通過 在helpers.c- - 我的壞。 我沒有說現在。 因此,我們實際上是要 運行實際的代碼。 Usage.find /,你知道這意味著什麼? 學生:你需要第二個 在它的命令行。 JASON HIRSCHHORN:我需要 第二個命令行。 並根據規範要求,我需要 進入我們正在尋找的東西。 因此,讓我們來看看42。 我們將保持它在排序的,因為我們 沒有寫一個排序功能,但 - 42,43,44。 和控制D沒找到 大海撈針。 這是不好的。 這是肯定有的。 讓我們試試別的。 也許這是因為我把 但在開頭。 讓我們做41,42,43。 我們走吧。 它發現了它。 讓我們把它在結束現在,只 所以我們可以徹底的 - 40,41,42。 沒有找到針頭。 所以我提到這點。 不幸的是,我知道這 將要發生。 但用於教學目的, 這是很好的探索它。 這是行不通的。 出於某種原因,它無法找到它。 我們知道什麼是在那裡,但 我們目前還沒有找到它。 所以,有一件事我們可以做的是通過 GDB找到它,但確實有人, 無需通過GDB,有 在哪裡,我們搞砸了有意義嗎? [?摩杜? ?] 學生:我想可能是結束的時候 等於開頭,它的 只是一個元素的列表。 然後,它只是忽略它,而不是 實際檢查它。 JASON HIRSCHHORN:這是 完全正確。 當結束等於開始,我們做 還有在我們的列表中的元素? 學生:是的。 JASON HIRSCHHORN:是的,事實上,我們 有一個且僅有一個元件。 而這將極有可能發生時, 每次我們測試過的代碼,我們在 幹草堆或櫃檯 幹草堆的結束。 這就是開始和 結局是要等於 之一,二分查找。 因此,在這兩個情況下,沒有工作, 因為結束等於開始。 但是,如果結束等於開始, 這是否while循環執行? 它沒有。 而且我們也可以檢查 這再通過GDB。 那麼,如何才能解決這個問題的代碼,因為 當結束時等於 開始,我們也希望這 while循環運行。 因此,我們可以做什麼修復到第18行? 學生:[聽不清]大 小於或等於。 JASON HIRSCHHORN:完全正確。 雖然結局是大於 或等於開始。 所以,現在,我們一定要得到那 角落的情況在年底。 讓我們來看看。 讓我們運行此一次。 讓我們所有。 同樣,你必須只 跟著在這裡。 找到41這個時間。 只要保持一致。 找到42。 讓我們把它在開始 - 42,43,44。 我們發現了它。 所以這的確是變化 我們需要做。 這是一個很大的編碼,我們的 只是做了,二進制搜索。 沒有任何人有之前的任何問題 我謹對為我們寫了線 二進制搜索或者我們怎麼想通 什麼我們沒有搞清楚? 在我們繼續之前,我也想點 指出,總的來說,我們映射 我們的偽代碼之一 1到我們的代碼。 我們確實有一個棘手的事情 找出與 開始和結束。 但你有沒有計算過了,你 會寫相當多的 相同的代碼,保存為 那些最上面兩行。 然後你會意識到,當 您在檢查和案件有否規定 你需要別的東西。 所以,即使你曾跟隨我們 偽代碼行來行,你就已經 得到了所有,但兩行 你需要編寫代碼。 而我願意打賭,你們 本來都想通了這一點 很快,你需要把 某種標誌物在有圖 出你在哪裡。 這又是幹什麼的力量 偽代碼的時間提前。 所以我們可以做的邏輯,然後再 大家可以放心使用的語法。 如果我們一直感到困惑的邏輯 而試圖寫這段代碼在C中, 我們會得到全亂了。 然後我們就可以問的問題 邏輯和語法和網格 它們放在一起。 我們會得到丟失 在哪可以迅速成為一個 非常棘手的問題。 現在讓我們繼續前進 要選擇排序。 我們還剩下20分鐘。 所以,我有,我們將不能夠感覺 通過所有選擇排序的獲得 和冒泡排序。 但是,讓我們至少嘗試 完成選擇排序。 因此,實現選擇排序使用 下面的函數聲明。 再次,這是從 問題設置規範。 int值是括號,是 整數數組。 和int.n是該數組的大小。 選擇排序是怎麼回事 這個數組進行排序。 因此,根據我們的心智選擇的模型 排序,我們拉 - 首先,我們通過列表中的第一 時間,找到最小的數字, 把它放在開頭,找到第二 最小的數字,把它放在 如果我們要第二位置 排序按升序排序。 我不會強迫你寫 偽代碼現在。 但在此之前我們做的代碼作為一個階級的 五分鐘,我們將寫 偽代碼,所以我們有一些感 的我們要去的地方。 因此,嘗試寫偽代碼 在你自己的。 然後再嘗試打開該 偽代碼轉換成代碼。 我們將做到這一點作為一個群體 在五分鐘內。 當然,讓我知道,如果 您有任何問題。 學生:那呢? JASON HIRSCHHORN:看看有多少你 可以在兩分鐘搞定。 我知道你不會 能夠完成。 但我們將在此為一組。 你所有的編碼等等[聽不清],所以我 對不起暫停自己在做什麼。 但是,讓我們通過這作為一個群體。 再次,二分查找,大家給 我一個,如果沒有更多行的代碼。 謝謝你的。 我們打算做同樣的事情 這裡,作為一組一起碼。 所以,選擇排序 - 讓我們寫 一些快速的偽代碼。 每心智模式,可以有人給我 第一線的偽代碼,好嗎? 我想要什麼做的? 學生:雖然名單 出了毛病。 JASON HIRSCHHORN:OK,而 該列表是不合乎規程。 和你是什麼意思“壞了?” 學生:在[聽不清] 沒有被排序。 JASON HIRSCHHORN:雖然名單 出了毛病,我們該怎麼辦? 給我的第二行, 請,馬庫斯。 學生:所以找到下一個 最小的數字。 這將縮進。 JASON HIRSCHHORN:所以找到 下一個最小的數。 然後別人? 一旦我們找到下一個最小的 數,我們該怎麼做? 我要說找 的最小數量。 這就是我們想要做的。 因此,找到最小的數字。 那麼我們該怎麼做? 學生:[聽不清]為開端。 JASON HIRSCHHORN:對不起? 學生:在將其放置 開始列表。 JASON HIRSCHHORN:所以把它放在 在列表的開頭。 而我們做的事情是什麼 這是在開始 列表中的,對不對? 我們覆蓋的東西。 那麼,我們把那? 是啊,安娜? 學生:其中最小 數字是? JASON赫希洪:所以把開始 列表中的其中 最小的數字了。 因此,儘管名單已經出來的順序,找到 最小的數字,將其放置在 該列表的開頭,把 開始列表的其中 最小的數字了。 馬庫斯,你可以整理這條線 而名單已經出來了的秩序? 學生:雖然數字 未分類的? JASON赫希洪:OK,所以為了 知道這些數字都沒有 排序的,什麼是我們需要做什麼? 有多少,我們需要 通過這個名單? 學生:所以我想一個for循環,或 同時,在檢查數量較少 比列表的長度是多少? JASON赫希洪:好,這是很好的。 我想我misphrased 我的問題知之甚少。 我只是試圖讓在 我們將不得不去 在整個列表。 因此,儘管名單已經出來的順序, 對我來說,是很難地圖。 但基本上,這就是如何 我想這個問題。 通過整個列表中,找到 最小數,將其放置在 開始 - 其實,你說得對。 讓我們把他們兩個。 因此,儘管名單已經出來了的訂單,我們 需要經過整個列表 一次,找到最小的數字,地點 它在列表的開頭,把 在列表的開頭,其中 最小數目是,然後,如果 列表仍然失靈,我們已經 得去通過這個 進程再次,對不對? 這就是為什麼選擇排序,大O運行 選擇排序的,任何人嗎? 學生:無平方。 JASON赫希洪:無平方。 因為像馬庫斯,我才意識到 在這裡,我們將不得不 通過列表名單 的次數。 所以,經歷的事 長度為n的n次號 其實是在Ñ平方。 所以這是我們的偽代碼。 這看起來很不錯。 沒有任何人有任何疑問, 關於偽? 因為實際上選擇排序應該 大概要一對一,代碼 偽代碼。 因此,任何有關問題 偽代碼的邏輯是什麼? 現在請提問。 選擇排序 - 而名單已經出來了 的順序,我們將通過它 並找出最小的每次 並把它放在前面。 因此,儘管名單已經出來了,可以順序 有人給我說行代碼誰 還沒有給我行 然而,代碼好嗎? 這聽起來像一個什麼? 學生:這是一個for循環。 JASON赫希洪:聽起來 喜歡一個for循環。 OK,你可以給我的for循環? 對於 - 學生:我等於0。 JASON赫希洪:我還是 - 什麼是我們缺少什麼? 善有善報就在這裡? 學生:詮釋。 JASON赫希洪:沒錯。 (INT I = 0; - 學生:我