Rust 和 C 排序演算法效能對比

語言: CN / TW / HK

關注「 Rust程式設計指北 」,一起學習 Rust,給未來投資

“C++ 和 Java 的發展速度比 C 語言更快,但我敢肯定,C 語言仍然會長期存在。”

Dennis Ritchie, C語言之父

C 和 Rust 的速度比較

方法

比較這兩種語言速度的方法是,通過實現常用的排序演算法,並在不同的元素範圍執行,比較哪種語言在排序時耗時最長。我們使用的排序演算法包括:

1. Bubble Sort(氣泡排序)

2. Insertion Sort(插入排序)

3. Selection Sort(選擇排序)

4. Shell Sort(希爾排序)

5. Heap Sort(堆排序)

圖:時間複雜度

以上是常見的排序演算法的時間複雜度,通過觀察最壞情況下的複雜度,我們可以大致知道哪種排序技術會在它們之間表現最差。

氣泡排序 Bubble sort 最壞情況複雜度為O(N²),與其他排序演算法相比,可能會出現表現最差的情況。我們將要生成的結果還將輸出比較元素排序所需的時間,來幫助我們瞭解最壞情況下的時間複雜度。

所以,我已經用 C 和 Rust 編寫了以上 5 種演算法。對於輸入,我使用一個整數陣列,並使用 C 語言中的隨機數生成器函式 rand() 和 Rust 中的 rand::Rng 在陣列中填充隨機數。這個陣列被作為排序演算法的輸入,輸出記錄在一個矩陣中。測試三個範圍 1000,10000 & 100000 個元素的演算法效能。

我們設定運行了 100 次迭代,並取平均值來生成輸出結果。

效能測試的設定

完成並執行上述設定的系統配置是:

macOS Catalina

MacBook Pro(16英寸,2019年版本)

處理器: 2.3 GHz 8 核英特爾酷睿 i9

記憶體: 16 GB 2667 MHz DDR4

clang 版本 12.0.0 (優化 flag -O3)

rustc 1.45.2 (優化 flag -release)

效能統計

以下是生成的輸出:

C語言在不同排序演算法上的表現

Rust 在不同排序演算法上的表現

從輸出結果中可以非常清楚地看到,大部分結果是非常接近。對於每種排序演算法和陣列範圍,在某些情況下 Rust 表現更好,而在某些情況下 C 表現更好。在較小的元素範圍(1000 元素)中,除了插入排序之外,Rust 表現更好一些。對於 10000 元素的範圍,C 語言在每種排序演算法下都表現得更好。

條形圖也展示了所有情況下的執行結果,速度幾乎相同。

你也可以嘗試在自己的系統上去驗證。

專案程式碼 Github : http://github.com/imrushabh/C_vs_Rust

結論

要得出哪種語言更快的結論是相當困難的,因為它取決於具體情況。但我們可以認為 Rust 在速度上是 C 語言的競爭對手,它比許多其他流行的語言如 Java 和 Python 速度更快。Rust 提供了很多功能,比如它注重速度、記憶體安全和並行,而且它也是開源的,我們可以使用 Rust 開發廣泛的新軟體應用,比如遊戲引擎、作業系統、檔案系統、瀏覽器元件和虛擬現實的模擬引擎。在未來的時間裡,我們肯定會到處看到 Rust 的身影!!!

英文原文:

http://levelup.gitconnected.com/which-is-faster-rust-or-c-lets-find-out-who-is-the-usain-bolt-87495c774c8

推薦閱讀

覺得不錯,點個贊吧

掃碼關注「 Rust程式設計指北