go語言基準測試Benchmark 最佳實踐-冒泡排序和快速排序算法基準測試時間復雜度對比

在go語言中Benchmark基準測試( 在后綴為_test.go的文件中,函數原型為 func BenchmarkXxx(b *testing.B) {}的函數 )可以用來幫助我們發現代碼的性能和瓶頸, 其最佳實踐 應該是我們最常用的 冒泡排序和快速排序的測試了,廢話不說,直接上代碼:

冒泡排序和快速排序算法代碼 sort_algorithm.go

package sortingimport "math/rand"// 冒泡排序算法
func BubbleSort(arr []int) {n := len(arr)for i := 0; i < n-1; i++ {for j := 0; j < n-i-1; j++ {if arr[j] > arr[j+1] {arr[j], arr[j+1] = arr[j+1], arr[j]}}}
}// 快速排序算法入口
func QuickSort(arr []int) {quickSort(arr, 0, len(arr)-1)
}// 快排算法
func quickSort(arr []int, low, high int) {if low < high {pivot := partition(arr, low, high)quickSort(arr, low, pivot-1)quickSort(arr, pivot+1, high)}
}// 快排拆分邏輯
func partition(arr []int, low, high int) int {pivot := arr[high]i := low - 1for j := low; j < high; j++ {if arr[j] < pivot {i++arr[i], arr[j] = arr[j], arr[i]}}arr[i+1], arr[high] = arr[high], arr[i+1]return i + 1
}// 生成指定長度的隨機數字切片
func makeRandomNumberSlice(n int) []int {numbers := make([]int, n)for i := range numbers {numbers[i] = rand.Intn(n)}return numbers
}const LENGTH = 10_000

冒泡排序和快速排序算法代碼基準測試用例 sort_algorithm_test.go

注意:b.N 基準函數必須運行目標代碼b.N次。在基準測試執行期間, b.N 會被動態調整來確保基準測試函數能夠持續足夠長的時間,從而確保時間的可靠性。

package sortingimport "testing"// 基準測試運行命令: go test -bench=.   這里的.表示運行當前所有的基準測試, 也可以指定函數名
// benchmark基準測試用例func BenchmarkBubbleSort(b *testing.B) {for i := 0; i < b.N; i++ {b.StopTimer() // 停止計時numbers := makeRandomNumberSlice(LENGTH)b.StartTimer() // 開始計時BubbleSort(numbers)}
}func BenchmarkQuickSort(b *testing.B) {for i := 0; i < b.N; i++ {b.StopTimer() // 停止計時numbers := makeRandomNumberSlice(LENGTH)b.StartTimer() // 開始計時QuickSort(numbers)}
}

運行結果

上面的結果中, 1-4行表示的是你當前測試用的機器的信息

在第5行的測試結果中第一列的 BenchmarkBubbleSort-16 這里的16表示有16個CPU來執行測試;

第二列的數字32表示循環了32次 這個數字越大越好

第三列的 35757363 ns/op 表示 每次操作的用時 35757363 納秒 這個數字越小越好

通過上面的基準測試結果,我們可以非常直觀的得出結論, 快速排序算法的表現最佳 ,他的時間復雜度為 O(n log n), 而冒泡排序表現較差,時間復雜度為 O(n^2)

參考

testing package - testing - Go Packages

https://dev.tekin.cn/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/17909.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/17909.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/17909.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【MySQL精通之路】InnoDB(9)-表和頁壓縮(2)-頁壓縮

目錄 1.支持的平臺 2.頁面壓縮的工作原理 3.啟用頁面壓縮 4.禁用頁面壓縮 5.頁面壓縮-元數據 6.使用頁面壓縮識別表 7.頁面壓縮限制和使用說明 InnoDB支持對駐留在FPT表空間中的表進行頁面級壓縮。 此功能被稱為透明頁面壓縮。通過使用CREATE TABLE或ALTER TABLE指定COM…

項目9-網頁聊天室3(主界面之用戶信息)

1.前端頁面 CSS: 如何讓img里的圖片自適應div&#xff0c;且不變形_img自適應div大小 鋪滿且不變形-CSDN博客 JavaScript/jQuery 如何改變一個img元素的src屬性|極客教程 (geek-docs.com) 2.要求 左上角顯示用戶的昵稱和頭像. 3.后端代碼 3.1 添加攔截器 3.2 注冊攔截器 …

關于C++的類型轉換一篇搞掂

類型轉換 本篇主要探討C11的新出現的類型轉換方式 隱式類型轉換(意義相近的類型可轉換) 顯示類型轉換(意義不相近的類型需強制類型轉換) C為了加強類型轉換的可視性, 引入了四種命名強制類型轉換操作符 但同時也兼容了C語言之前的類型轉換和強制類型轉換, 只是提供了規范的轉…

go升級后 編譯的exe在win7上無法正常運行

D:/Go/src/runtime/sys_windows_amd64.s:65 x75 fpx22fca sp-0x22fc8日 升級到go 1.21后報一堆錯誤&#xff0c;要死了啊 原來是go 1.21不支持win7了&#xff0c;必須把go退回到1.20版本 谷歌發布編程語言 Go 1.21 版本&#xff1a;取消支持微軟 Win7/8 及蘋果 macOS 10.13/10…

pip install pytorch-quantization error

一 報錯信息 最近安裝pytorch-quantization報錯&#xff0c;安裝失敗報錯信息如下&#xff1a; Looking in indexes: https://pypi.org/simple, https://pypi.ngc.nvidia.com Collecting pytorch-quantizationDownloading pytorch-quantization-2.2.1.tar.gz (6.8 kB)Prepari…

Alibaba Cloud Linux 安裝docker

阿里云實例基于 Red Hat 的發行版&#xff08;例如 CentOS 或 Alibaba Cloud Linux&#xff09;。在這種情況下&#xff0c;應該使用 yum 或 dnf 包管理器&#xff0c;而不是 apt。以下是如何在 CentOS 或類似系統上安裝 Docker 的步驟&#xff1a; 1. 更新系統 首先&#xf…

網絡滲透思考

1. windows登錄的明文密碼&#xff0c;存儲過程是怎么樣的&#xff0c;密文存在哪個文件下&#xff0c;該文件是否可以打開&#xff0c;并且查看到密文 windows的明文密碼:是通過LSA&#xff08;Local Security Authority&#xff09;進行存儲加密的 存儲過程:當用戶輸入密碼之…

用C語言實現掃雷

本篇適用于C語言初學者&#xff0c;主要涉及對于函數&#xff0c;數組&#xff0c;分支循環的運用。 目錄 設計思想&#xff1a; 總代碼&#xff08;改進后&#xff09;&#xff1a; 運行結果展示&#xff1a; 分布介紹&#xff1a; 聲明&#xff1a; 代碼主體部分&#…

Vue3學習使用axios和qs進行POST請求和響應處理

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 一、前言1.準備工作2.發送POST請求3.處理響應數據4.總結 一、前言 在前端開發中&#xff0c;經常需要與后端進行數據交互&#xff0c;其中包括發送POST請求并處理響…

Docker - Kafka

博文目錄 文章目錄 說明命令 說明 Docker Hub - bitnami/kafka Docker Hub - apache/kafka Kafka QuickStart Kafka 目前沒有官方鏡像, 目前拉取次數最多的 bitnami/kafka, Apache 提供的是 apache/kafka, 本文使用 bitnami/kafka 數據卷數據卷印射在容器內的路徑kafka/bitna…

HarmonyOS 鴻蒙應用開發 - 創建自定義組件

開發者定義的稱為自定義組件。在進行 UI 界面開發時&#xff0c;通常不是簡單的將系統組件進行組合使用&#xff0c;而是需要考慮代碼可復用性、業務邏輯與UI分離&#xff0c;后續版本演進等因素。因此&#xff0c;將UI和部分業務邏輯封裝成自定義組件是不可或缺的能力。 1、創…

快團團幫賣團長怎么對供貨大團長進行評分?

都說幫賣“躺賺”&#xff1f; 一旦遇團不淑&#xff0c;慘遭不靠譜團長挖坑&#xff0c;售后拖延、發貨慢、產品瑕疵…… 加上顧客奪命連環催&#xff0c;雙面夾擊&#xff0c;夾縫生存。供貨團長靠不靠譜太重要了&#xff01; 快團團供貨團長評分系統上線&#xff01; 幫賣團…

【神經網絡優化的策略有哪些???】

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言一、神經網絡優化策略總結 前言 神經網絡優化是深度學習中至關重要的一部分&#xff0c;它涉及到調整神經網絡參數以最小化損失函數。 以下是一些常見的神經網…

ECOLOGY9解決明細表數據按需顯示或隱藏

ECOLOGY9:由于領導需要查看完整的明細表數據&#xff0c;沒有啟用分頁功能&#xff0c;導致大領導查看時又出現幾百行的數據&#xff0c;影響使用體驗。需求&#xff1a;只看正常表單數據&#xff0c;明細表數據&#xff0c;默認不顯示&#xff0c;需要查看時再打開。 實現&am…

2024年華為OD機試真題-火星文計算-C++-OD統一考試(C卷D卷)

題目描述: 已知火星人使用的運算符為#、$,其與地球人的等價公式如下: x#y = 4*x+3*y+2 x$y = 2*x+y+3 1、其中x、y是無符號整數 2、地球人公式按C語言規則計算 3、火星人公式中,#的優先級高于$,相同的運算符,按從左到右的順序計算 現有一段火星人的字符串報文,請…

【RK3288 Android10 T8pro usb hid-multitouch idc配置】

【RK3288 Android10 T8pro usb hid-multitouch idc配置】 文章目錄 【RK3288 Android10 T8pro usb hid-multitouch idc配置】背景代碼分析1. 讀取配置文件2. 標志內外置屏幕3. 設置輸入設備4. findviewport()5. 根據對應的viewport來計算相應的mapping的參數 結論 背景 T8pro …

二十三篇:未來數據庫革新:AI與云原生的融合之旅

未來數據庫革新&#xff1a;AI與云原生的融合之旅 1. 智能數據庫管理&#xff1a;AI的魔法 在數字化時代&#xff0c;數據庫技術作為信息管理的核心&#xff0c;正經歷著前所未有的變革。AI&#xff08;人工智能&#xff09;和云原生技術的融合&#xff0c;正在重新定義數據庫…

關于k8s集群的污點和容忍,以及k8s集群的故障排查思路

一 污點(Taint) 和 容忍(Tolerations) &#xff08;一&#xff09;污點 在Kubernetes&#xff08;K8s&#xff09;中&#xff0c;污點&#xff08;Taints&#xff09;是一個重要的概念&#xff0c;用于實現Pod的調度控制。以下是關于污點的詳細解釋&#xff1a;1.污點定義 污點…

元宇宙vr科普館場景制作引領行業潮流

在這個數字化高速發展的時代&#xff0c;北京3D元宇宙場景在線制作以其獨特的優勢&#xff0c;成為了行業內的創新引領者。它能夠快速完成空間設計&#xff0c;根據您的個性化需求&#xff0c;輕松設置布局、燈光、音效以及互動元素等&#xff0c;為您打造出一個更加真實、豐富…

【算法】位運算算法——判斷字符是否唯一

題解&#xff1a;判斷字符是否唯一(位運算算法) 目錄 1.題目2.題解3.位圖參考代碼4.細節5.總結 1.題目 題目鏈接&#xff1a;LINK 2.題解 題解有兩種方法&#xff0c; 一是做一個哈希數組&#xff0c;去查重&#xff1b; 二是直接用一個變量每一位來對應表示是否有這個字母…