Go语言中计算程序运行时长可以用time包里的time.Since(time)函数,参数time是程序(算法)运行前的当前本地时间。
比如要计算一个算法的运行时长的代码如下:
t1 := time.Now()
printEmptyRhombus1()
elapsed := time.Since(t1)
fmt.Println("elapsed=", elapsed)
用这个函数可以很快计算出一个算法的效率。我们举个例子来体验一下:
比如:画一个层数是111的菱形,用两种算法打印:
方法一:用行,列扫描的方式输出,代码如下:
func printEmptyRhombus1() {
var totalRow int = 111
var totalCol int
// fmt.Println("请输入菱形的行数(奇数):")
// fmt.Scanln(&totalRow)
// if totalRow%2 == 0 { // 判断是否是奇数
// fmt.Println("行数列数必须是奇数")
// os.Exit(-1) //退出程序
// }
totalCol = totalRow
//i表示当前行数,j表示当前列数
for i := 1; i <= totalRow; i++ {
//输出菱形上半部分
if i < (totalRow+1)/2 {
//输出*,j表示*的个数
for j := 1; j <= totalCol; j++ {
//j==1表示当前层第一个,j==2*i-1表示当前层最后一个
if (totalCol+1)/2-(i-1) <= j && j <= (totalCol+1)/2+(i-1) {
fmt.Print("*")
} else {
fmt.Print(" ")
}
}
} else { //输出菱形下半部分
for j := 1; j <= totalCol; j++ {
if (totalCol+1)/2-(totalRow-i) <= j && j <= (totalCol+1)/2+(totalRow-i) {
fmt.Print("*")
} else {
fmt.Print(" ")
}
}
}
fmt.Println()
}
}
方法二:巧用倒三角打印输出,代码如下:
func printEmptyRhombus() {
var totalLayer int = 56
//i表示层数,正三角56层,倒三角55层,总层数111层
for i := 1; i <= totalLayer; i++ {
//输出""空格,k表示空格个数
for k := 1; k <= totalLayer-i; k++ {
fmt.Print(" ")
}
//输出*,j表示*的个数
for j := 1; j <= 2*i-1; j++ {
//j==1表示当前层第一个,j==2*i-1表示当前层最后一个
// if j == 1 || j == 2*i-1 {
// fmt.Print("*")
// } else {
// fmt.Print(" ")
// }
fmt.Print("*")
}
fmt.Println()
}
//输出倒三角形,倒三角55层
for i := totalLayer - 1; i > 0; i-- {
//输出""空格,k表示空格个数
for k := 1; k <= totalLayer-i; k++ {
fmt.Print(" ")
}
//输出*,j表示*的个数
for j := 1; j <= 2*i-1; j++ {
//j==1表示当前层第一个,j==2*i-1表示当前层最后一个
// if j == 1 || j == 2*i-1 {
// fmt.Print("*")
// } else {
// fmt.Print(" ")
// }
fmt.Print("*")
}
fmt.Println()
}
}
分别用time.Since函数计算两个算法的耗时,比较如下:
方法一:耗时输出结果
方法二:耗时输出结果
通过对比,用方法二的耗时还要短一些,所以方法二算法效率更高一些。