Golang 驗證程序(算法)運行時長

     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函數計算兩個算法的耗時,比較如下:

方法一:耗時輸出結果

方法二:耗時輸出結果

 

通過對比,用方法二的耗時還要短一些,所以方法二算法效率更高一些。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章