zoukankan      html  css  js  c++  java
  • 分治理法求数组最大值

    如今给出一个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(" "); } 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 ",_max,_min); return 0; }

    以下是几次执行的结果.


  • 相关阅读:
    JDBC事务管理
    JDBC常见操作
    Java集合之List接口
    Nginx+Keepalived+Lvs实现双机热备
    Nginx+Consul+Upsync实现动态负载均衡
    DNS域名解析概念
    WPF中实现两个窗口之间传值
    C# 重写(override)和覆盖(new)
    C# DateTime.Now函数
    WPF中在后台实现控件样式
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/7255488.html
Copyright © 2011-2022 走看看