[C#] Recherche dans un tableau

Recherche dans un tableau [C#] - C#/.NET managed - Programmation

Marsh Posté le 04-05-2007 à 14:29:13    

Bonjour,  
 
Je m'en remets à vous car je pense que je vais devenir dingue  :pt1cable:  
 
Je dois effectuer une simple recherche dans un tableau et si dans ce tableau il y a deux nombres égaux, une variable retient la valeur qui est égale et c'est tout...
 
Donc en gros, je peux avoir un tableau du genre : 3 2 3 4 2 5 6 6 7
 
Et ma valeur retournée serait 3 (la première valeur en double).
 
Voici mon code :  
 
Mon tabpaire est composé de valeurs aléatoires.
 

Code :
  1. for (i = 0; i <= tabpaire.Length; i++)
  2.             {
  3.                 for (j=i+1; j < tabpaire.Length; j++)
  4.                 {
  5.                     if (tabpaire[i] == tabpaire[j])
  6.                     {
  7.                         paire = tabpaire[i];
  8.                     }
  9.                 }
  10.             }


 
Merci d'avance pour votre aide!  :jap:

Reply

Marsh Posté le 04-05-2007 à 14:29:13   

Reply

Marsh Posté le 04-05-2007 à 14:31:30    

là t'es en O(n2 / 2). Si tu tries ensuite recherche deux valeurs consécutives égales, tu pourrais taper du O(nlogn + n/2) donc bien mieux.

Reply

Marsh Posté le 04-05-2007 à 14:47:45    

Merci pour ta réponse!
 
J'ai essayé ça :  
 

Code :
  1. for (i = 0; i < tabpaire.Length - 1; i++)
  2.             {
  3.                 for (j = 0; j < tabpaire.Length - 1 - i; j++)
  4.                 {
  5.                     if (tabpaire[j + 1] < tabpaire[j])
  6.                     {
  7.                         tmp = tabpaire[j];
  8.                         tabpaire[j] = tabpaire[j + 1];
  9.                         tabpaire[j + 1] = tmp;
  10.                     }
  11.                 }
  12.             }
  13.             for (i = 0; i < tabpaire.Length - 1; i++)
  14.             {
  15.                 if (tabpaire[i] == tabpaire[i + 1])
  16.                 {
  17.                     paire = tabpaire[i];
  18.                 }
  19.             }


 
Mais il trouve des "paires" la ou il n'y en a pas parfois  :heink:

Reply

Marsh Posté le 04-05-2007 à 17:26:57    

tu veux pas essayer la méthode plus rapide et plus simple que je te conseille ?

Reply

Marsh Posté le 04-05-2007 à 18:17:33    

Bah c'est ce que je fais!
 
Bubble sort puis recherche de deux nombres consécutifs...

Reply

Marsh Posté le 04-05-2007 à 21:26:01    

à moins que je ne sois complètement fou, ton bubble sort à une drôle de touche... et je vois pas trop ce que fait ta boucle extérieure :heink:
 
sinon, pkoi ne pas détecter le doublon pendant l'algo de tri ?
ça évite de trier jusqu'au bout, et de reparcourir le array ensuite.
 
par contre, evidement ton array est trié n'importe comment à la fin mais bon :D

Reply

Marsh Posté le 07-05-2007 à 17:46:10    

Bon, j'ai refais des tests et mon tableau est très bien trié...
 
Mon problème est donc de trouver deux entiers consécutifs dans un tableau trié.
 
Voici le code que j'ai fait :  
 

Code :
  1. for (i = 0; i < tabpaire.Length-1 && bol == 0; i++)
  2.             {
  3.                 if (tabpaire[i] == tabpaire[i + 1])
  4.                 {
  5.                     paire = tabpaire[i];
  6.                     bol = 1;
  7.                 }
  8.             }


 
Mais ca ne fonctionne pas bien : il me trouve parfois le bon nombre, parfois il n'en trouve pas alors qu'il y en a et parfois il en invente...
Quelqu'un a une idée lumineuse?  :pt1cable:

Reply

Marsh Posté le 09-05-2007 à 10:37:30    

déjà, au lieu de jouer avec "bol", colle un break dans le if, ce sera plus propre.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed