分治理法求数组最大值

如今给出一个n个元素的书组,元素个数n。须要求出最大最小值.

方法1.

用max,min。分别记录数组最大最小值,顺序扫描数组,不断替换更新max。min,(max,min的初始值都为数组中的第一个元素)

方法2.

1.假设数组中仅仅有一个元素。那么它是最大也是最小值

2.否则数组中多于一个数。则能够求出左边的最大最小值,右边的最大最小值.然后该区间的最大值是max(lmax,rmax),最小值是min(lmin,rmin)

详细例如以下(n个数字由随机生成).

#include <stdio.h>
#include <time.h>
int getmax(int a,int b){
        return a>b?a:b;
}
int getmin(int a,int b){
        return a<b?

a:b;
}
void print(int a[],int n){
        int i;
        for(i=0;i<20;i++)
                printf("%d ",a[i]);
        printf("\n");
}
void maxmin(int a[],int l,int r,int * _max,int * _min){
        if(r>l){
               int m=(l+r)/2;
               int _lmin,_rmin,_lmax,_rmax;
                maxmin(a,l,m,&_lmax,&_lmin);
                maxmin(a,m+1,r,&_rmax,&_rmin);
               *_max=getmax(_lmax,_rmax);
               *_min=getmin(_lmin,_rmin);
        }else{
        *_max=*_min=a[l];
        }
}
int creat(int a[],int n,int m){
        int i;
        srand(time(NULL));
        for(i=0;i<n;i++)
                a[i]=rand()%m-m/2;
        return n;
}
int main(){
        int n,i;
        int a[100];
        int _min,_max;
        creat(a,20,100);
        print(a,20);
        maxmin(a,0,19,&_max,&_min);
        printf("max:%d min:%d\n",_max,_min);
        return 0;
}

以下是几次执行的结果.

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvU2FwcGhpcmVTdGFydA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >

时间: 2024-10-13 07:34:26

分治理法求数组最大值的相关文章

29.求数组最大值

import java.util.Scanner; public class MaxScore { /** * 求数组最大值 */ public static void main(String[] args) { int[] scores = new int[5]; int max = 0; //记录最大值 System.out.println("请输入5位学员的成绩:"); Scanner input = new Scanner(System.in); for(int i = 0;

C#编程入门--求数组最大值最小值

工具类如下: public class ArrayHelper { #region Double数组最大值 /// <summary> /// Double数组最大值 /// </summary> /// <param name="array"></param> /// <returns></returns> public static double DoubleMax(double[] array) { if (

求数组最大值或最小值

1. 一维数组 const arr = [1, 5, 9, 0, 11] const maxValue = Math.max.apply(null, arr ) const minValue = Math.min.apply(null, arr ) console.log(maxValue ,minValue) 2. 多维数组 const arr1 = [2, 5, 8] const arr2 = [9, 5, 2] const convertArr = arr1.join(',').split

求数组最大值,最小值

Math.max.apply(this,[120,129,56,34,98]) //129 Math.max.call(this,120,129,56,34,98) //129 Math.min.apply(this,[120,129,56,34,98]) //34 Math.min.call(this,120,129,56,34,98) //34 原文地址:https://www.cnblogs.com/AnnieShen/p/9253638.html

求数组最大值

let arr = [3,2,4,1,8,6] let maxValue = Math.max.apply(null,arr); console.log(maxValue); 原文地址:https://www.cnblogs.com/-jianjian/p/11345947.html

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

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

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

实现求数组的最大值最小值,蛮力法要容易的多.本着重在体验分治法的思想的原则: 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

求数组元素的最大值最小值

这是编程之美上的一个题目: 一般的做法: void main() { int a[5]={78,63,78,67,18}; int min=0,max=0; min=max=a[0]; for(int i=0;i<5;i++) { if(min>a[i]) min=a[i]; if(max<a[i]) max=a[i]; } printf("%d,%d\n",max,min); } 这种方法总共比较了2*N次 如何降低比较次数呢? 我在这里着重记录一下分冶法的做法:

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

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