Trouver la valeur maximale dans le tableau en C++

Jinku Hu 12 octobre 2023
  1. Utilisez la méthode itérative pour trouver la valeur maximale dans un tableau C++
  2. Utilisez l’algorithme std::max_element pour trouver la valeur maximale dans un tableau C++
  3. Utilisez l’algorithme std::minmax_element pour trouver la valeur maximale dans un tableau C++
Trouver la valeur maximale dans le tableau en C++

Cet article présentera comment trouver la valeur maximale dans un tableau en C++.

Utilisez la méthode itérative pour trouver la valeur maximale dans un tableau C++

Le moyen simple d’implémenter une fonction personnalisée pour la recherche de valeur maximale consiste à utiliser la méthode itérative. L’exemple de code suivant a la structure de boucle for qui parcourt chaque élément du tableau et vérifie si la valeur actuelle est supérieure à la valeur maximale actuelle. Notez que la valeur maximale actuelle est initialisée avec la valeur du premier élément du tableau et modifiée lorsque la condition if évalue vrai.

#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;
}

Production:

Maximum element is: 2147460568
FindMax: 0.00017500 sec

Utilisez l’algorithme std::max_element pour trouver la valeur maximale dans un tableau C++

std::max_element est une autre méthode pour trouver la valeur maximale dans la plage donnée. Cela fait partie des algorithmes STL, et la surcharge la plus simple ne prend que deux itérateurs pour désigner les limites de plage à rechercher. std::max_element renvoie un itérateur sur l’élément de valeur maximale. Si plusieurs éléments ont la même valeur et sont simultanément des maximums, la fonction renvoie l’itérateur qui pointe vers le premier.

#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;
}

Production:

Maximum element is: 2147413532
FindMax2: 0.00023700 sec

Utilisez l’algorithme std::minmax_element pour trouver la valeur maximale dans un tableau C++

Alternativement, nous pouvons utiliser l’algorithme std::minmax_element de STL pour trouver les éléments minimum et maximum dans la plage donnée et les renvoyer sous la forme std::pair. La fonction minmax_element peut éventuellement prendre une fonction de comparaison binaire personnalisée comme troisième argument. Sinon, il a les mêmes paramètres que le max_element et il se comporte de la même façon lorsque plusieurs éléments min/max se trouvent dans la plage.

#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;
}

Production:

MIN element is: 3843393 MAX element is: 2147251693
FindMinMax: 0.00000400 sec
Auteur: 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

Article connexe - C++ Array