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函数计算两个算法的耗时,比较如下:

方法一:耗时输出结果

方法二:耗时输出结果

 

通过对比,用方法二的耗时还要短一些,所以方法二算法效率更高一些。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

king110108

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值