HOWTO · C++

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

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

En esta página

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