演算法是一組以特定順序給出的用於解決問題的指令。演算法的速度和占用記憶體量有所不同。在程式設計過程中,大多數演算法都是基於資料搜尋(搜尋)和排序(排序)。讓我們來熟悉一下資料檢索演算法:
線性搜尋(線性搜尋)
讓我們得到以下數組:
[20, 500, 10, 5, 100, 1, 50]
當視覺化一個陣列時,它可以被視為七個並排的紅色櫃子,如下所示:
我們要從這個陣列中找出 50 個數字。計算機必須檢查每個儲物櫃才能找到數字 50。我們稱這個過程為在陣列中搜尋特定的數字、字元或其他元素「搜尋」.
我們可以將陣列傳遞給演算法,並要求演算法打開櫥櫃並確定數字 50 是否存在。結果,演算法將回答我們「是」或「否」(正確或錯誤)。
我們可以使用以下指令來建構演算法:
Chapdan o‘ngga har bir eshikni tekshirish: Agar 50 soni bor bo‘lsa: Ha deb qaytaramiz (return true) Yo‘q deb qaytaramiz (return false)
上面的說明是人類可讀的偽代碼,是向電腦發出的命令的更簡單表示。
我們可以使用以下程式碼在 C 中實作線性搜尋演算法:
#include <cs50.h> #include <stdio.h> int main(void) { // Butun sonlardan iborat massiv berilgan int numbers[] = {20, 500, 10, 5, 100, 1, 50}; // Kiritilgan sonni massivdan qidiramiz int n = get_int("Number: "); for (int i = 0; i <p>這裡使用 for 迴圈執行線性搜尋。 <br> return 0 表示程式成功結束,程式退出。 <br> return 1 - 表示程式中發生錯誤。 </p> <hr> <h2> 二分查找 </h2> <p><em>二分查找</em>是另一個用來搜尋數字 50 的演算法。 <br> 如果數組中的值按升序排序,我們可以給出二分查找的偽代碼如下:<br> </p> <pre class="brush:php;toolbar:false">Agar tekshiriladigan element qolmagan bo‘lsa: Yo‘q deb qaytaramiz (return false) Agar massivning[o‘rta elementi] 50 soniga teng bo‘lsa: Ha deb qaytaramiz (return true) Agar massivning[o‘rta elementi] > 50: Massivning chap yarmidan qidiramiz Agar massivning[o‘rta elementi] <hr> <h2> 大O表示法 </h2> <p><strong>大O</strong> <strong>符號</strong>用於分析運行演算法所需的時間。我們來看下圖:</p> <p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173590294458453.jpg?x-oss-process=image/resize,p_40" class="lazy" alt="CS- Week 3"></p> <p><em>「輸入資料大小」</em> – x 軸; <em>「求解時間」</em> – y 軸;<br> 演算法的效率由其曲線的形狀決定:<br> O(n²) 是最差性能時間。 <br> O(log n) 是最快的執行時間。 </p><p>線性搜尋演算法的運行時間是 O(n),因為在最壞的情況下可能需要 n 步。 <br> 而二分查找演算法工作的時間是O(log n),因為在最壞的情況下,步數會越來越少。 </p> <p>程式設計師感興趣的有兩種情況:</p>
- 最壞情況或上限(上限)。
- 最佳情況或下限(下限)。
Ω 用來表示演算法的最佳情況 (下界),例如 Ω(n)。
符號TH表示上下界相同的情況,即最好和最差運行時間相同。
排序演算法(Sorting)
排序是將無序值清單變更為有序值的過程。
當陣列排序後,電腦可以更輕鬆地搜尋其中的特定元素。例如,二分搜尋 (二分搜尋) 適用於已排序的數組,但不適用於未排序的數組。
排序演算法有很多種。讓我們考慮其中一個選擇排序 (選擇排序)。讓我們得到一個像這樣的陣列:
選擇方法演算法的偽代碼如下:
[20, 500, 10, 5, 100, 1, 50]
步驟分析:
- 第一次遍歷陣列元素需要 n - 1 步。
- 第二次需要n - 2步。
- 繼續這個邏輯,所需的步驟可以表示為:
Chapdan o‘ngga har bir eshikni tekshirish: Agar 50 soni bor bo‘lsa: Ha deb qaytaramiz (return true) Yo‘q deb qaytaramiz (return false)
簡化這個公式,我們得到:n(n-1)/2 或 O(n²)。
因此,選擇方法的演算法在最壞情況下按 O(n²) 順序排序。即使所有值都已排序,步數也不會改變,因此最好的情況是 O(n²) 順序。
冒泡排序演算法(Bubble sort)
冒泡排序是另一種排序演算法,我們透過重複排列元素來「提升」更大的值。
冒泡排序演算法的偽代碼如下:
#include <cs50.h> #include <stdio.h> int main(void) { // Butun sonlardan iborat massiv berilgan int numbers[] = {20, 500, 10, 5, 100, 1, 50}; // Kiritilgan sonni massivdan qidiramiz int n = get_int("Number: "); for (int i = 0; i <p>當我們對數組進行排序時,我們知道更多的數組將被排序,因此我們只需要檢查尚未排序的對。 <br> 因此,如果數組未排序,冒泡排序演算法在最壞的情況下工作 O(n²),如果數組已排序,則在最好的情況下工作 O(n)。 </p> <p>我們可以在此頁面直觀地看到排序演算法是如何運作的。 </p> <blockquote> <p>本文使用 CS50x 2024 原始碼。 </p> </blockquote> </stdio.h></cs50.h>
以上是CS-第 3 週的詳細內容。更多資訊請關注PHP中文網其他相關文章!

掌握C 中的多态性可以显著提高代码的灵活性和可维护性。1)多态性允许不同类型的对象被视为同一基础类型的对象。2)通过继承和虚拟函数实现运行时多态性。3)多态性支持代码扩展而不修改现有类。4)使用CRTP实现编译时多态性可提升性能。5)智能指针有助于资源管理。6)基类应有虚拟析构函数。7)性能优化需先进行代码分析。

C DestructorSprovidePreciseControloverResourCemangement,whergarBageCollectorSautomateMoryManagementbutintroduceunPredicational.c Destructors:1)允許CustomCleanUpactionsWhenObextionsWhenObextSaredSaredEstRoyed,2)RorreasereSouresResiorSouresiorSourseResiorMeymemsmedwhenEbegtsGoOutofScop

在C 項目中集成XML可以通過以下步驟實現:1)使用pugixml或TinyXML庫解析和生成XML文件,2)選擇DOM或SAX方法進行解析,3)處理嵌套節點和多級屬性,4)使用調試技巧和最佳實踐優化性能。

在C 中使用XML是因為它提供了結構化數據的便捷方式,尤其在配置文件、數據存儲和網絡通信中不可或缺。 1)選擇合適的庫,如TinyXML、pugixml、RapidXML,根據項目需求決定。 2)了解XML解析和生成的兩種方式:DOM適合頻繁訪問和修改,SAX適用於大文件或流數據。 3)優化性能時,TinyXML適合小文件,pugixml在內存和速度上表現好,RapidXML處理大文件優異。

C#和C 的主要區別在於內存管理、多態性實現和性能優化。 1)C#使用垃圾回收器自動管理內存,C 則需要手動管理。 2)C#通過接口和虛方法實現多態性,C 使用虛函數和純虛函數。 3)C#的性能優化依賴於結構體和並行編程,C 則通過內聯函數和多線程實現。

C 中解析XML數據可以使用DOM和SAX方法。 1)DOM解析將XML加載到內存,適合小文件,但可能佔用大量內存。 2)SAX解析基於事件驅動,適用於大文件,但無法隨機訪問。選擇合適的方法並優化代碼可提高效率。

C 在遊戲開發、嵌入式系統、金融交易和科學計算等領域中的應用廣泛,原因在於其高性能和靈活性。 1)在遊戲開發中,C 用於高效圖形渲染和實時計算。 2)嵌入式系統中,C 的內存管理和硬件控制能力使其成為首選。 3)金融交易領域,C 的高性能滿足實時計算需求。 4)科學計算中,C 的高效算法實現和數據處理能力得到充分體現。

C 沒有死,反而在許多關鍵領域蓬勃發展:1)遊戲開發,2)系統編程,3)高性能計算,4)瀏覽器和網絡應用,C 依然是主流選擇,展現了其強大的生命力和應用場景。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

Dreamweaver CS6
視覺化網頁開發工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

WebStorm Mac版
好用的JavaScript開發工具