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函數計算兩個算法的耗時,比較如下:
方法一:耗時輸出結果
方法二:耗時輸出結果
通過對比,用方法二的耗時還要短一些,所以方法二算法效率更高一些。