求数组的最大值和最小值

求数组的最大最小值,可以遍历一遍数组,然后分别记录最大值和最小值,这种方法需要的比较次数为2N次。如果想要减少比较次数,可以采用的方法是遍历数组,然后比较相邻元素,把相邻元素的较大值放在后面,较小的放在前面。在从较大值中选取最大值即为整个数组的最大值,从较小值中选取最小值即为整个数组的最小值。这时,需要的比较次数为1.5*N次。

void findmaxmin(int a[],int n)
{
	if(a==NULL||n<0)
		return ;
	int i=0;
	int maxe=0x80000000;
	int mine=0x7fffffff;
	for(i=0;i<n;i+=2)
	{
		if(i+1<n&&a[i]>a[i+1])
			std::swap(a[i],a[i+1]);
	}
	for(i=0;i<n;i+=2)
	{
		if(i+1==n)
		{
			if(a[i]>maxe)
				maxe=a[i];
			if(a[i]<mine)
				mine=a[i];
		}
		if(a[i]<mine)
			mine=a[i];
		if(a[i+1]>maxe)
			maxe=a[i+1];
	}
	cout<<maxe<<" "<<mine<<endl;
}

也可以使用分治的方法,先在左半数组求出最大值和最小值,再求右半数组的最大值和最小值,比较两个最大值即可求出整个数组的最大值,比较两个最小值即可求出整个数组的最小值。设比较次数为f(n),有f(2)=1;f(n)=2*f(n/2)+2;

可以求出需要的比较次数是1.5*N-2,比较的次数没有减少。

struct res
{
int min;
int max;
};

res findmaxmin2(int a[],int start,int end)
{
	res r;
	if(start>=end-1)
	{
		if(a[start]<a[end])
		{
			r.min=a[start];
			r.max=a[end];
		}
		else
		{
			r.min=a[end];
			r.max=a[start];
		}
		return r;
	}
	int mid=(end-start)/2+start;
	res left=findmaxmin2(a,start,mid);
	res right=findmaxmin2(a,mid+1,end);
	r.max=left.max>right.max?left.max:right.max;
	r.min=left.min<right.min?left.min:right.min;
	return r;
}
时间: 2024-08-10 21:19:33

求数组的最大值和最小值的相关文章

使用JavaScript&#183;求数组的最大值和最小值

前言  在数组中并没有提供arr.max()和arr.min()这样的方法.那么是不是可以通过别的方式实现类似这样的方法呢?那么今天我们就来整理取出数组中最大值和最小值的一些方法. 法一:其实利用 ECMAScript5的 ...展开运算符可以很简单的解决这个问题 var arr=[2,7,3,10,22,11]; Math.max(...arr); //44 Math.min(...arr); //2  法二 : 对数组进行遍历 对于数组的遍历,有多种不同的方法,下面对各种方法进行比较:Arr

如何求数组的最大值和最小值

前言 取出数组中的最大值或者最小值是开发中常见的需求,但你能想出几种方法来实现这个需求呢? Math.max JavaScript 提供了 Math.max 函数返回一组数中的最大值,用法是: Math.max([value1[,value2, ...]]) 值得注意的是: 如果有任一参数不能被转换为数值,则结果为 NaN. max 是 Math 的静态方法,所以应该像这样使用:Math.max(),而不是作为 Math 实例的方法 (简单的来说,就是不使用 new ) 如果没有参数,则结果为 

求数组里面最大值,最小值

有些时候,我们需要求出一个数组里面的最大值,最小值. 先说最大值: //求数组里面的最大值 let arr=[2,5,8,9,3,50,1]; function maxNum(){ let max=arr[0]; //假如第一项为最大值 for(let i=1;i<arr.length;i++){ //将数据里面的其他项依次和第一项进行比较. if(arr[i]>max){ //只要找到数组里面的某一项大于我们之前设定的最大项,就把他们的顺序换掉 max=arr[i]; } } return

用java script 求数组的最大值、最小值、和、平均数

let readline = require(`readline-sync`); console.log(`请输入数组的长度`); let long = ~~readline.question(``); let arr = []; let sum = 0; let average = 0; for (let i = 0; i < long; i++) { console.log(`请输入第` + (i + 1) + `项的值:`); arr[i] = parseFloat(readline.qu

求数组中最大值,最小值

Array.prototype.max = function(){   //最大值 return Math.max.apply({},this)} Array.prototype.min = function(){   //最小值 return Math.min.apply({},this)} var myMax = [1,2,3].max()// => 3var myMin = [1,2,3].min()// => 1 console.log(myMin,myMax); var _getMi

分治法求数组的最大值最小值

实现求数组的最大值最小值,蛮力法要容易的多.本着重在体验分治法的思想的原则: 1 int main(void) 2 { 3 void Maxmin(int a[],int low,int high,int maxmin[2]); 4 int a[10],maxmin[2]; 5 6 printf("Enter 10 integer numbers:\n"); 7 for(int i=0;i<10;i++) 8 scanf("%d",a+i); 9 10 Max

java实现求一个数组里最大值和最小值之前缺省的数的算法

问题描述: 求一个数组里最大值和最小值之间缺省的数,例如 int arrDemo = {1, 3, 7};  那么就要输出最小值1和最大值7之间缺少的数字2,4,5,6 代码如下,有更好的思路欢迎大家在评论区留言讨论 1 package test; 2 3 public class Test { 4 5 static int[] array = { 6 -10,0,3,3,9 7 }; 8 9 private static void printEmptyItems(int[] array) {

获取数组中最大值和最小值

var ary = [12,23,23,4,4,12,4,141,4]; 1.利用obj存储 var min = max= null; var obj = {}; for(var i=0;i<ary.length;i++){ var cur = ary[i]; obj[cur]= cur; } var count = 0 ; for(var key in obj){ count++; if(count===1){ min = key; } max = key; } console.log(min

求数组的最大值和次大值

#include <stdio.h> #include <stdlib.h> /* 求数组的最大值和次大值. */ int main() { int n; while (printf("Please input n:\n"),fflush(stdin), scanf("%d", &n) != EOF){ if (n < 2){ printf("Please input a bigger number.\n")