Bonjour !
Une petite modification pour éviter deux tours de boucles:
void secondLargest(int *a, int nba, int *largest, int *second) { if (nba < 2) { *largest = -1; *second = -1; } if (a[0] < a[1]) { *largest = a[1]; *second = a[0]; } else { *largest = a[0]; *second = a[1]; } for (int i = 2; i < nba; ++i) { if (a[i] > *largest) { *second = *largest; *largest = a[i]; } else if (a[i] > *second) { *second = a[i]; } } }
En C++, on utiliserait un std::vector et on retournerait un std::pair. Une manière plus générique encore, serait de passer des itérateurs.
La version la plus propre serait d'utiliser https://en.cppreference.com/w/cpp/algorithm/nth_element qui fait exactement cela !
Bonjour CptPingu,
bonjour tous,
Merci beaucoup pour cet envoi ayant une meilleure efficacité.
Et merci aussi pour les indications complémentaires.
Entre temps l'envoi de Lindb du 24 octobre dans le forum de CCM-CS
a disparu, mais l'intérêt de cette réponse reste entier.
Le C++ a tellement possibilités qu'il est très formateur de voir
des exemples comme celui-ci.