Encuentre el valor máximo en un array en C++

Jinku Hu 12 octubre 2023
  1. Utilice el método iterativo para encontrar el valor máximo en un array C++
  2. Utilice el algoritmo std::max_element para encontrar el valor máximo en un array C++
  3. Utilice el algoritmo std::minmax_element para encontrar el valor máximo en un array C++
Encuentre el valor máximo en un array en C++

Este artículo presentará cómo encontrar el valor máximo en un array en C++.

Utilice el método iterativo para encontrar el valor máximo en un array C++

La forma sencilla de implementar una función personalizada para la búsqueda de valor máximo es utilizando el método iterativo. El siguiente código de ejemplo tiene la estructura de bucle for que recorre cada elemento del array y comprueba si el valor actual es mayor que el valor máximo actual. Tenga en cuenta que el valor máximo actual se inicializa con el valor del primer elemento del array y se modifica cuando la condición if se evalúa como verdadera.

#include <sys/time.h>

#include <ctime>
#include <iostream>

using std::cout;
using std::endl;

void generateNumbers(int arr[], size_t &width) {
  std::srand(std::time(nullptr));
  for (size_t i = 0; i < width; i++) {
    arr[i] = std::rand();
  }
}

template <typename T>
T FindMax(T *arr, size_t n) {
  int max = arr[0];

  for (size_t j = 0; j < n; ++j) {
    if (arr[j] > max) {
      max = arr[j];
    }
  }
  return max;
}

float time_diff(struct timeval *start, struct timeval *end) {
  return (end->tv_sec - start->tv_sec) + 1e-6 * (end->tv_usec - start->tv_usec);
}

int main() {
  struct timeval start {};
  struct timeval end {};

  size_t width = 100000;
  int *arr = new int[width];

  generateNumbers(arr, width);

  gettimeofday(&start, nullptr);
  cout << "Maximum element is: " << FindMax(arr, width) << endl;
  gettimeofday(&end, nullptr);

  printf("FindMax: %0.8f sec\n", time_diff(&start, &end));

  delete[] arr;
  return EXIT_SUCCESS;
}

Producción :

Maximum element is: 2147460568
FindMax: 0.00017500 sec

Utilice el algoritmo std::max_element para encontrar el valor máximo en un array C++

std::max_element es otro método para encontrar el valor máximo en el rango dado. Es parte de los algoritmos STL, y la sobrecarga más simple requiere solo dos iteradores para indicar los límites de rango para buscar. std::max_element devuelve un iterador al elemento de valor máximo. Si varios elementos tienen el mismo valor y al mismo tiempo resultan ser máximos, la función devuelve el iterador que apunta al primero.

#include <sys/time.h>

#include <ctime>
#include <iostream>

using std::cout;
using std::endl;

void generateNumbers(int arr[], size_t &width) {
  std::srand(std::time(nullptr));
  for (size_t i = 0; i < width; i++) {
    arr[i] = std::rand();
  }
}

template <typename T>
T FindMax2(T *arr, size_t n) {
  return *std::max_element(arr, arr + n);
}

float time_diff(struct timeval *start, struct timeval *end) {
  return (end->tv_sec - start->tv_sec) + 1e-6 * (end->tv_usec - start->tv_usec);
}

int main() {
  struct timeval start {};
  struct timeval end {};

  size_t width = 100000;
  int *arr = new int[width];

  generateNumbers(arr, width);

  gettimeofday(&start, nullptr);
  cout << "Maximum element is: " << FindMax2(arr, width) << endl;
  gettimeofday(&end, nullptr);

  printf("FindMax2: %0.8f sec\n", time_diff(&start, &end));

  delete[] arr;
  return EXIT_SUCCESS;
}

Producción :

Maximum element is: 2147413532
FindMax2: 0.00023700 sec

Utilice el algoritmo std::minmax_element para encontrar el valor máximo en un array C++

Alternativamente, podemos usar el algoritmo std::minmax_element de STL para encontrar elementos tanto mínimos como máximos en el rango dado y devolverlos como std::pair. La función minmax_element puede tomar opcionalmente una función de comparación binaria personalizada como tercer argumento. De lo contrario, tiene los mismos parámetros que el max_element y se comporta de manera similar cuando se encuentran varios elementos min / max en el rango.

#include <sys/time.h>

#include <ctime>
#include <iostream>

using std::cout;
using std::endl;

void generateNumbers(int arr[], size_t &width) {
  std::srand(std::time(nullptr));
  for (size_t i = 0; i < width; i++) {
    arr[i] = std::rand();
  }
}

template <typename T>
auto FindMinMax(T *arr, size_t n) {
  return std::minmax_element(arr, arr + n);
}

float time_diff(struct timeval *start, struct timeval *end) {
  return (end->tv_sec - start->tv_sec) + 1e-6 * (end->tv_usec - start->tv_usec);
}

int main() {
  struct timeval start {};
  struct timeval end {};

  size_t width = 100000;
  int *arr = new int[width];

  generateNumbers(arr, width);

  gettimeofday(&start, nullptr);
  auto ret = FindMinMax(arr, width);
  gettimeofday(&end, nullptr);
  cout << "MIN element is: " << *ret.first << " MAX element is: " << *ret.second
       << endl;

  printf("FindMinMax: %0.8f sec\n", time_diff(&start, &end));

  delete[] arr;
  return EXIT_SUCCESS;
}

Producción :

MIN element is: 3843393 MAX element is: 2147251693
FindMinMax: 0.00000400 sec
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artículo relacionado - C++ Array