`
kmplayer
  • 浏览: 512222 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

2.10 寻找数组中的最大值和最小值

阅读更多
1,可以将者看成两个独立的问题。
个需要比较N次,需要比较2*N次。

2,我们可以两两分组。
每一对中较小的放左边,较大放右边。 N/2次。
奇数位比较N/2次,找到最小值。
偶数位比较N/2次,找到最大值。
总的比较次数:1.5N。
缺点:破坏了原数组。

3,维持两个变量min和max。
取出两个数,相比较1次。
较小的和min比较,决定是否更新min。
同理,更新max。
可见处理两个数,比较3次。
总的比较次数:1.5N
优点:不会破坏原来的数组。

4,分治思想
#include <iostream>
using namespace std;

void maxmin(int a[],int low,int high,int& max,int& min) //引用作为参数的强大作用
{
    int k, max1,min1,max2,min2;
    if(high-low==1||high-low==0)
    {
        a[low]>a[high]? (max = a[low], min = a[high]):(max = a[high], min = a[low]);
    }
    else
    {

        k=(high+low)/2;
        maxmin( a,low,k,max1,min1);
        maxmin( a,k+1,high,max2,min2);
		//一层比较两次
        max=max1>max2? max1:max2;
        min=min1<min2? min1:min2;
    }
}

int main()
{
    int max,min;
    int data[]={8,3,6,2,1,9,4,5,7};
    int num=sizeof(data)/sizeof(data[0]);
    maxmin(data,0,num-1,max,min);
    cout<<"最大值:"<<max<<endl;
    cout<<"最小值:"<<min<<endl;
    return 0;
}

复杂度分析:

f(2) = 1;
f(n) = 2*f(n/2) + 2; (注:一层需要比较两次)
可以推出f(n) = 1.5*n -2;
可见总的比较次数仍然没有减少。
分享到:
评论

相关推荐

    C语言程序设计代码复习题大全.zip

    2.9 求一个二维数组的最大值和最小值 2.10 求一个4*4矩阵所有元素的和 3 循环结构程序题 3.1 输入一个大于3的整数n,判断它是否为素数(素数又称质数,就是除了能被1和它本身整除之外,不能被其它自然数整除的自然数...

    LeetCode解题总结

    1.3 寻找两个排序数组的中位数 1.4 最长连续序列 1.5 累加和 1.6 移除数组中指定值 1.7 下一个排列 1.8 第n个全排列 1.9 验证数独的正确性 1.10 容纳雨水的量 1.11 旋转图像 1.12 数字加1 1.13 爬楼梯 1.14 格雷码 ...

    C 语言 扑克牌小游戏

    - **功能**: 寻找数组中的最大值。 - **参数**: - `int list_pri[]`: 需要查找最大值的数组。 #### 2.10 `find_max_t1` 函数 - **功能**: 特定情况下寻找最大值。 - **参数**: - `int list_pri[]`: 需要查找最大...

    VB考试题型与解题技巧.docx

    求极值的基本思想是从给定的一组数中找到最大值或最小值,通常采用循环结构来进行比较。 ##### 2.4 排序 排序算法是计算机科学中的一个重要组成部分。常见的排序算法包括选择法、冒泡法、插入法和归并法等。每种...

    c语言经典算法

    求最大值或最小值的问题在C语言中可以通过一次循环和比较操作轻松解决,但对于大数据集,算法的选择和优化则显得尤为重要。 #### 3.9 数字反序 数字反序是一个简单的字符串操作示例,通过C语言的字符串函数和循环...

    R语言基础课程

    - `max()`、`min()`:查找最大值和最小值。 - `sd()`:计算标准差。 ##### 2.8 查看内存中已有的对象 - `ls()`:列出当前环境中所有的对象名称。 - `rm(list=ls())`:删除当前环境中的所有对象。 ##### 2.9 访问...

    MATLAB TUTORIAL MATLAB 教程.pdf

    MATLAB提供了许多用于处理向量的内置函数,例如求和、最大值、最小值等。 **2.8 其他有用内置函数** 除了上述函数外,MATLAB还提供了其他一些有用的内置函数,如`size`、`length`等,用于查询数组的维度信息。 **...

    上海交大ACM模板,ACMer值得一看

    赢家树是一种特殊的数据结构,用于高效地维护一组数据中的最大值或最小值。它常用于在线游戏中实时更新排名列表等场景。 #### 1.6 数字树 (Digital Tree) 数字树也称为Trie树,是一种用于处理字符串的树形结构。在...

    acm入门必备

    - 更新树状数组中某个位置的值。 **3.3.3 前缀和A[1]+…+A[p]** - 通过树状数组快速计算从1到p的累加和。 **3.3.4 一个二维树状数组的程序** - 介绍如何实现和使用二维树状数组。 **3.4 线段树** - 线段树是一...

    ACM必备内容(几乎全)!!!

    线段树是一种支持区间查询和更新操作的数据结构,通常用于处理区间最大值、最小值等问题。 ##### 3.5 字符串 字符串处理是编程中的常见需求,涉及到许多算法和技术。 - **字符串哈希**:通过计算字符串的哈希值来...

    c语言经典算法(来自bccn)

    可能是一种优化问题,如求解函数的最大值或最小值,需要运用微积分或线性规划的知识。 #### 3.9 数字反序 涉及到数字字符串的反转,可能需要用到字符串操作或数字转换技术,是基础算法中的常见练习。 #### 3.10 ...

    数据结构(java版)习题解答

    - **解答**:首先遍历每行,记录每行的最大值及其位置;再遍历这些位置所在的列,检查是否为最小值。 **实验0.6:复数类** - **题目**:定义一个复数类,包括加法、减法等运算。 - **解答**:创建一个复数类,定义...

    ACM模板(几乎全)

    - **Range Minimum Query (RMQ)**:在数组中寻找指定区间的最小值。 - **Lowest Common Ancestor (LCA)**:寻找一棵树中两个节点的最近公共祖先。 - **Reduction from LCA to RMQ**:如何将 LCA 问题转换为 RMQ 问题...

    C++ Primer中文版(第5版)李普曼 等著 pdf 1/3

     3.5.1 定义和初始化内置数组 101  3.5.2 访问数组元素 103  3.5.3 指针和数组 105  3.5.4 C风格字符串 109  3.5.5 与旧代码的接口 111  3.6 多维数组 112  小结 117  术语表 117  第4章 表达式 119  4.1 ...

Global site tag (gtag.js) - Google Analytics