首页 > 其他 > 详细

性能分析

时间:2021-04-12 12:21:30      阅读:28      评论:0      收藏:0      [点我收藏+]

在同一个目录下创建文件heapsort_test.go和heapsort.go

heapsort.go

package test

import (
    "log"
    "time"
)
func main(){
    // var a = []int{45,145,245,32,5,2,69,239,12,40}
    // log.Print("before: ", a)
    start := time.Now().UnixNano()
    heapsort(b)
    end := time.Now().UnixNano()
    log.Print("after: ", b)
    Milliseconds:= float64((end - start) / 1e6)
    log.Print("start_time, end_time, cost: ", start, end, Milliseconds)
}

func heapsort(arr []int) {
    len := len(arr)
    buildMaxHeap(arr)
    swap(arr, 0, len-1)
    for i := len-1;i>0;i-- {
        heapify(arr[0:i], 1)
        swap(arr[0:i], 0, i-1)
    }	
}

func buildMaxHeap(arr []int) {
    lenH := len(arr)
    for i:=lenH/2;i>0;i-- {
        heapify(arr,i)
    }
}

func swap(arr []int, i int, j int) {
    temp := arr[i]
    arr[i] = arr[j]
    arr[j] = temp
}
/*
 * 指定位置的节点按最大堆调整
 *
 */
func heapify(arr []int, heap int) {

    if (heap>len(arr) || heap*2>len(arr)){
        return
    }
    // 比较左子节点 
    if (arr[heap-1] < arr[2*heap-1]) {
        swap(arr, heap-1, 2*heap-1)
    }
    // 比较右子节点
    if (heap*2+1>len(arr)) {
        return
    }
    if (arr[heap-1] < arr[2*heap]) {
        swap(arr, heap-1, 2*heap)
    }

    // 子节点
    heapify(arr, 2*heap)
    heapify(arr, 2*heap+1)
}

  heapsort_test.go

package test

import (
	"testing"
)

var a = []int{45,145,245,32,5,2,69,239,12,40}

func Benchmark_heapsort(b *testing.B) {
	for i:=0; i < b.N;i++{
		buildMaxHeap(a)
	}
}

  

在终端执行命令:

go test -bench . -count=2

显示:

技术分享图片

 含义:

  • Benchmark_heapsort-8 中的 8 即 GOMAXPROCS,默认等于 CPU 核数
  • 17031591 88.43 ns/op 表示单位时间内(默认是1s)被测函数运行了 17031591 次,每次运行耗时 88.43ns,

    17031591*88.43ns=1.506s(耗时比 1s 略多,因为测试用例执行、销毁等是需要时间的)

  • ok  github.com/...     3.197s  表示总耗时3.197s

 

性能分析

原文:https://www.cnblogs.com/beilong/p/14646508.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!