假设法求最大值和数组的优点

给定一个数组,求数组中的最大值。

用假设法可解,思路是,把数组中随便一个元素设置为最大值,然后让其它元素和它比,如果比当前最大值大,那么最大值就被设置为这个元素,这个过程有点类似打擂台,共有N个人打擂台,其中一个人说,我是最厉害的,然后后面一个人把他打败了,它就编程最大的了,前面就被淘汰了,擂台上始终是当前最厉害的,那么最后留在擂台上的就是最厉害的。

想出假设法的人真的很聪明啊,我怎么想不到呢?

假设是4个整型变量,那么有以下代码

int a,b,c,d

int max=a;

if(b>=max)

max=b;

if(c>=max)

max=c;

if(d>=max)

max=d;

发现没有,这三段if代码很相似,但似乎不会有简便的办法了。

如果把这四个变量放到数组中,那么我们可能会写出这样的代码:

int main(void)
{
	int num[] = { 35,34,67,67};
	int max = num[3];
	
	
		if (num[0] >= max)
		{
			max = num[0];
		}
		if (num[1] >= max)
		{
			max = num[1];
		}
		if (num[2] >= max)
		{
			max = num[2];
		}
		if (num[3] >= max)
		{
			max = num[3];
		}

	printf("max=%d",max);
	return 1;
}

  

可以发现几段if代码就是数组索引不一样,其它地方都一样,如下图:

数组索引是一个常数,我们可以用一个变量i来代替它,然后让i的值从0开始,每次加1这样变化,for循环正是有这样的功能。

于是代码可以被优化成下面这样。

int main(void)
{
	int num[] = { 35,34,67,67};
	int max = num[3];
	
	for (int i = 0; i <= 3; i++)
	{
		if (num[i] >= max)
		{
			max = num[i];
		}
	}
		
	printf("max=%d",max);
	return 1;
}

  

数组从某些角度讲有优化代码的功能。

猜你喜欢

转载自www.cnblogs.com/yfish/p/9807235.html