2010-09-25 4 views
1

Lors du tri d'un tableau pour ex: A [5] = {1,4,5,3,2} la sortie doit être 1,2,3,4,5 dans l'ordre croissant. en utilisant le concept de tri bulle ma sortie est 0,1,2,3,4 ce serait le problème dans mon codeTri en tableaux

int A[5]={1,5,3,2,4}; 
    for(int i=0;i<5;i++){ 
    for(int j=0;j<5;j++){ 
    if(A[j]>A[j+1]) 
    { 
     int t=A[j]; 
     A[j]=A[j+1]; 
     A[j+1]=t; 
    } 
    } 
    } 
    for(i=0;i<5;i++) 
    cout<<A[i]; 
+7

Peut-être que vous avez des index mélangés avec des valeurs? Nous n'avons aucun moyen de le savoir car aucun code d'exemple n'est fourni. –

+3

sauf si vous nous montrez votre code, il n'y a aucun moyen de le savoir. – Naveen

+0

-1 postez votre code –

Répondre

2

Pourquoi ne pas utiliser le type STL?

#include <algorithm> 

std::sort(A, A+5); 
+1

La partie "+5" est glissante ... Si 'A' est un' array' ou 'vector', alors on peut écrire' A.size() ', mais pour C-style le tableau le moyen préféré est probablement à '#define ARRAYSIZE (A) (sizeof (A)/sizeof (A [0]))', puis appelez 'std :: sort (A, A + ARRAYSIZE (A));' – Arun

+1

@ArunSaha: à peine. Cela se casse silencieusement si 'A' est un pointeur. Si vous voulez faire quelque chose comme ceci, utilisez un modèle en ligne. En outre, je ne suis pas sûr pourquoi cela a été downvoted. Semble une réponse sensée dans le cas général. Bien sûr, si la question fait partie d'une tâche de devoirs ou quelque chose du genre, la version STL est probablement sortie, mais nous ne le savons pas. – jalf

+0

@jaif: Vous avez raison, si 'A' est un pointeur alors' ARRAYSIZE' ne fonctionne pas. Mais, cela change trop la définition du problème, dans le problème 'A' était ** pas ** un pointeur :). J'ai également mentionné '.size()' peut être utilisé autant que possible. BTW, ce n'est pas moi qui a downvoted. – Arun

0

Peut-être que vous imprimez i au lieu de A[i] dans la boucle d'impression, comme dans

for(int i = 0; i < N; i++) { 
    cout << i << ",";   // by mistake, printing i instead of A[i] 
} 
0

Y at-il une raison que vous faites sorte de bulle, autre puis essayer de l'apprendre? C'est l'une des sortes les plus lentes.

3

Vous devez limiter votre boucle interne à < 4:

int A[5]={1,5,3,2,4}; 
for(int i=0;i<5;i++){ 
    for(int j=0;j<4;j++){ 
     if(A[j]>A[j+1]) 
     { 
      int t=A[j]; 
      A[j]=A[j+1]; 
      A[j+1]=t; 
     } 
    } 
} 
for(i=0;i<5;i++) 
    cout<<A[i]; 
Questions connexes