我剛開始學(xué)習(xí) golang 并決定實(shí)現(xiàn)一些基本的排序算法(冒泡排序、選擇排序和插入排序)來嘗試使用包、切片和測(cè)試基礎(chǔ)設(shè)施。這是實(shí)現(xiàn):package child_sortfunc SortBubble(xs []int) { for i := range xs { swapped := false for j := 1; j < len(xs)-i; j++ { if xs[j-1] > xs[j] { xs[j-1], xs[j] = xs[j], xs[j-1] swapped = true } } if !swapped { break } }}func SortSelection(xs []int) { for i := range xs { min_i := i for j := i + 1; j < len(xs); j++ { if xs[j] < xs[min_i] { min_i = j } } if min_i != i { xs[i], xs[min_i] = xs[min_i], xs[i] } }}func SortInsertion(xs []int) { for i := 1; i < len(xs); i++ { for j := i; j > 0; j-- { if xs[j] < xs[j-1] { xs[j], xs[j-1] = xs[j-1], xs[j] } } }}單元測(cè)試似乎工作正常,但是當(dāng)我為這些創(chuàng)建基準(zhǔn)測(cè)試時(shí),我得到了奇怪的結(jié)果,如下所示:go test --bench . --benchmem PASSBenchmarkBubble 1 2258469081 ns/op 241664 B/op 1 allocs/opBenchmarkSelection 1000000000 0.60 ns/op 0 B/op 0 allocs/opBenchmarkInsertion 1 1180026827 ns/op 241664 B/op 1 allocs/opok .../go/src/child_sort 12.976s困擾我的是選擇排序幾乎立即運(yùn)行并產(chǎn)生零分配。如果我減小數(shù)組的大小,其他排序算法也會(huì)發(fā)生同樣的事情。反之亦然,即如果我增加大小,選擇排序開始正常運(yùn)行。
- 1 回答
- 0 關(guān)注
- 201 瀏覽
添加回答
舉報(bào)
0/150
提交
取消