• 求一个数组当中最大(最小)值的两种计算方法


    求一个数组当中最大(最小)值的两种计算方法

    1、常用方法(以求最大值为例)

     1 #include "stdafx.h"
     2 #include <string>
     3 using namespace std;
     4 int _tmain(int argc, _TCHAR* argv[])
     5 {
     6     int a[5] = { 1, 23, 2, 6, 7 };
     7     int array_length = sizeof(a) / sizeof(a[0]);//数组大小
     8     int max=a[0];
     9     for (int i = 1; i < array_length; i++)
    10     {
    11         if (a[i]>max)
    12         {
    13             max = a[i];
    14         }
    15     }
    16     printf("数组a的最大值为%d", max);
    17     getchar();
    18     return 0;
    19 }

    2、同时寻找最大值和最小值

          一种思路是将上述常见的寻找最大值和最小值算法分别运行一遍就可以分别将最大值和最小值找出来,这样的话在输入情况最差的情况下面,算法运行的时间复杂度为O(2n)。另外的一种思路是同时对数组当中连续的两个数字进行比较,取其中较大的和临时最大值作比较、取其中最小的和临时最小值作比较,直到数组最后遍历完成,就可以获得最大值最小值了。这种算法在最坏的情况下的时间复杂度为O(3[n/2])([n/2]代表向下取整),算法实现如下:

     1 #include "stdafx.h"
     2 #include <string>
     3 using namespace std;
     4 int _tmain(int argc, _TCHAR* argv[])
     5 {
     6     int a[9] = { 3, 2, 6, 1, 7, 10, 13, 9 ,20};
     7     int array_length = sizeof(a) / sizeof(a[0]);//数组大小
     8     int max=-10000;//临时最大值
     9     int min=10000;//临时最小值
    10     for (int i = 0; i < array_length && i+1<array_length; i=i+2)
    11     {
    12         if (a[i] < a[i + 1])
    13         {
    14             if (a[i] < min)
    15             {
    16                 min = a[i];
    17             }
    18             if (a[i + 1]>max)
    19             {
    20                 max = a[i + 1];
    21             }
    22         }else{
    23             if (a[i+1] < min)
    24             {
    25                 min = a[i+1];
    26             }
    27             if (a[i]>max)
    28             {
    29                 max = a[i];
    30             }
    31         }
    32     }
    33     //如果数组的大小为基数就要对数组当中的最后一个值单独拿出来做一次判断
    34     if (array_length % 2 != 0)
    35     {
    36         if (a[array_length - 1] < min)
    37         {
    38             min = a[array_length - 1];
    39         }
    40         if (a[array_length - 1] > max)
    41         {
    42             max = a[array_length - 1];
    43         }
    44     }
    45     printf("数组a的最大值为%d,最小值为%d", max, min);
    46     getchar();
    47     return 0;
    48 }

    3、寻找一个数组当中第i小的数字

           思路其实很简单,将数组做一次非递减排序,然后找到排好序当中的第i个数即可。排序算法的相关内容可以查看笔者的这一篇博客

  • 相关阅读:
    git常用命令
    Mybatis文档收集
    RocketMQ安装及配置
    vs code 插件收集
    idea中RunDashboard显示
    Error running ‘JeecgSystemApplication‘: Command line is too long. Shorten command line for JeecgSys
    shell脚本 for循环实现文件和目录遍历
    linux一次性解压多个.gz或者.tar.gz文件
    CentOS7挂载磁盘,4T磁盘挂载方法
    windows 安装Nginx服务
  • 原文地址:https://www.cnblogs.com/AlgrithmsRookie/p/5908340.html
Copyright © 2020-2023  润新知