éditer: Sur un changement impair que quelqu'un lit ceci, je voudrais ajouter une dernière chose. En supposant que les trois valeurs en question sont déjà en mémoire et qu'elles ne sont pas modifiées, j'ai compté pas moins de 14 instructions pour pouvoir réaliser cet exploit.Algorithme le plus efficace pour trouver la plus grande et la plus petite des trois valeurs
Je ressemble beaucoup à ceci confirmé si quelqu'un peut.
[fin d'édition haut]
Le problème est simple. J'ai trois valeurs entières et j'ai besoin de trouver le plus grand et le plus petit. Par le plus grand, je veux dire pas le plus petit ou entre et vice versa.
Comme je ne trouvais pas de «solution de qualité» en ligne, j'ai dû faire ma propre tentative.
if(a > b) {
if(a > c) {
high = a;
if(b > c) {
low = c;
}
else {
low = b;
}
}
else {
if(b > c) {
high = b;
low = c;
}
else {
high = c;
low = b;
}
}
}
else if(a > c) {
if(b > c) {
high = b;
low = c;
}
else {
high = c;
low = b;
}
}
else {
low = a;
if(b > c) {
high = b;
}
else {
high = c;
}
}
En supposant que je n'ai fait aucune erreur, cela devrait résoudre le problème en utilisant trois conditions. En supposant que cela fonctionne comme prévu, je suis plutôt satisfait de mon effort, mais mon intention était de trouver l'algorithme le plus efficace, donc je vous demande maintenant ce que c'est.
Cordialement.
Éditer: J'ai passé en revue les solutions proposées jusqu'ici et elles sont toutes agréables.
Mon préféré jusqu'ici.
if(a>b) {
max = a;
min = b;
}
else {
max = b;
min = a;
}
if(c>max)
max = c
else if(c< min)
min = c
2-3 sigments et 2-3 conditions, si je ne me trompe pas. C'est impressionnant.
petite révision de ce qui précède, en utilisant 'a' comme alias pour 'min'.
if(a>b) {
max = a;
a = b;
}
else {
max = b;
}
if(c>max)
max = c
else if(c< a)
a = c
Si seulement il y avait un moyen facile d'échanger des variables ... Eh bien, la seule chose que je peux penser est que cela pourrait éliminer le besoin de « max », au moins dans les dérivés C et C, certainement wouldn ne pas être efficace, sauf en termes d'utilisation de la mémoire, et je peux m'attendre à dépenser 4 octets supplémentaires. ;)
« mais mon intention l'ion était de trouver l'algorithme le plus efficace "Le plus efficace en termes de quoi? Moins de mémoire utilisée? Temps d'exécution moyen le plus rapide? Le temps d'exécution du pire cas le plus rapide? Moins de comparaisons? Moins de lignes de code? –
Pour quelle entrée cela fonctionne-t-il avec seulement deux conditions? – Deestan
Mon erreur, il n'y a pas de scénario avec seulement deux conditions. Quant à ce que je veux dire par le plus efficace ... Peut-être que j'aurais dû utiliser le mot "intelligent" à la place. Je pourrais dire d'un point de vue mathématique, impliquant le moins d'étapes ou la solution la plus élégante. – Zacariaz