我刚开始学习 golang 并决定实现一些基本的排序算法(冒泡排序、选择排序和插入排序)来尝试使用包、切片和测试基础设施。这是实现: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] } } }}单元测试似乎工作正常,但是当我为这些创建基准测试时,我得到了奇怪的结果,如下所示: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困扰我的是选择排序几乎立即运行并产生零分配。如果我减小数组的大小,其他排序算法也会发生同样的事情。反之亦然,即如果我增加大小,选择排序开始正常运行。
1 回答
- 1 回答
- 0 关注
- 184 浏览
添加回答
举报
0/150
提交
取消