Go語言歸併排序演算法實現TDD實踐報告

2021-10-09 17:55:12 字數 2990 閱讀 9481

迭代章節練習

修改測試**,以便呼叫者可以指定字元重複的次數,然後修復**

寫乙個 examplerepeat 來完善你的函式文件

注意上述**中最後一行// ouput: aaaaaaaaaa

看一下strings包(**上的連線需要連線外網,這裡提供的是中文版**)。找到你認為可能有用的函式,並對它們編寫一些測試。投入時間學習標準庫會慢慢得到回報。

測試**及結果如下

歸併排序的演算法實現

歸併排序(merge sort)是建立在歸併操作上的一種有效,穩定的排序演算法,該演算法是採用分治法的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列;即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為二路歸併。

tdd流程寫乙個測試用例並執行測試

package main

import

"testing"

var arr =

intfunc

testmergesort

(t *testing.t)

flag :=

true

for i :=

0; i <

len(arr)

; i++

}if flag ==

false

t.errorf

("but got"

)for i :=

0; i <

len(arr)

; i++

}}

為了執行測試,需要先新增乙個空的mergesort函式(根據tdd的步驟等下再實現)

package main

func

mergesort

(arr [

]int)[

]int

}

結果如下

實現能通過測試的程式並測試

package main

func

mergesort

(arr [

]int)[

]int

i :=

len(arr)/2

left :=

mergesort

(arr[

0:i]

) right :=

mergesort

(arr[i:])

result :=

merge

(left, right)

return result

}func

merge

(left, right [

]int)[

]int

result =

(result, left[m]

) m++

} result =

(result, right[n:

]...

) result =

(result, left[m:

]...

)return result

}func

main()

result :=

mergesort

(arr)

fmt.

println

(result)

}

先用main函式檢測輸出,結果正確如下

然後將main函式注釋,執行測試結果如下

重構、修改**

由於mergesort演算法較為常用且簡單,已經形成一種相對固定的套路,基本沒有需要重構和修改的地方,在本文中僅作注釋以實現這個步驟

基準測試

mergesort_test.go的基礎上新增如下**

func

benchmarkmergesort

(b *testing.b)

mergesort

(arrt)

}}

結果如下圖

**傳送門參考資料深度解讀 - tdd

go語言中文文件

往屆部落格參考

go語言benchmark

go語言benchmark詳解

C語言歸併排序

描述 給定乙個數列,用歸併排序演算法把它排成公升序。輸入 第一行是乙個整數n n不大於10000 表示要排序的數的個數 下面一行是用空格隔開的n個整數。輸出 輸出排序後的數列,每個數字佔一行。歸併排序有兩個關鍵點 1.將兩個已經排好序的序列進行合併。歸併2個有序序列為1個有序序列 void merg...

C語言 歸併排序

歸併是將兩個或多個存序記錄序列合併成乙個有序序列。一般來說,一次對幾個有序記錄進行歸併,就稱為幾路歸併排序。以二路歸併排序為例,其基本方法如下 1 將 n 個記錄看成是 n 個長度為 1 的有序子表。2 將兩兩相鄰時有序序列進行歸併。3 重複執行步驟 2 直到歸併成乙個長度為 n 的有序表 如下所示...

C語言歸併排序

include include description 歸併排序 author qingq datetime 2021年3月8日20點03分 int length 待排序陣列長度 int a 待排序陣列 int b 輔助陣列b void mergesort int a,int low,int hig...