probleme de tri en c. efficacité de l'algorithme..

probleme de tri en c. efficacité de l'algorithme.. - C - Programmation

Marsh Posté le 18-11-2010 à 13:52:07    

bonjour voici mon programme, il marche mais je ne sais pas si mon while (qui évite à l'ordinateur de faire des opérations inutiles) est bien placé. car si je le met juste au dessus de mon for et non en dessous comme c'est le cas, le programme marche aussi. je sais pas si ca se dit mais je veux interrompre ma boucle for en cours de route si rien n'a été échangé
 
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
int t[6]={2,1,10,4,7,6} ;
int i,j,temp ;
 
    int tab_en_ordre= 0 ;
    int taille = 6;
 
 
 
 
 
 
 
     for (j=taille-2 ; j>0 ; j--)
 
 
 
      {
 
      while(tab_en_ordre==0)
      {
 
 
 
 
        tab_en_ordre = 1 ;
        for( i=0 ; i <= j ; i++)
        {
            if(t[i] > t[i+1])
            { temp = t[i] ;
              t[i]=t[i+1] ;
              t[i+1]= temp ;
 
                tab_en_ordre = 0;
            }
        }
 
 
    }
 
 
}
for (i=0;i<6;i++)
printf("-%d",t[i]);
}
 
 
 

Reply

Marsh Posté le 18-11-2010 à 13:52:07   

Reply

Marsh Posté le 18-11-2010 à 14:27:58    

Quelques remarques:
- l'idiome normal en C et en C++, c'est d'avoir des boucles sur des intervalles semi-ouverts:

Code :
  1. for (i=debut; i < fin; ++i)
  2. for (i=fin; i-- > debut; )


avec l'habitude on se rend compte que ca simplifie generalement le code; n'utilise pas d'autres formes sans bonne raison
 
- la deuxieme expression dans une boucle for c'est une expression controllant un while, tu peux la completer; donc par exemple:

Code :
  1. for (j=taille; j-- > 2 && !tab_en_ordre; )


---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

Marsh Posté le 18-11-2010 à 14:39:58    

si je comprend bien mon idée de mettre un while au dessus du for revient à mettre une deuxieme condition dans le for  
 
et l'idée de mettre un while en dessous c'est aussi l'idée de rajouter une deuxieme condtion dans le for.
 
 
ces 3 écritures sont donc les memes et il faut privilégier  les deux conditions dans le for?

Reply

Marsh Posté le 18-11-2010 à 14:44:23    

Le while englobant ne sert a rien: le tableau sera toujours trie quand tu sorts des deux boucles for.
Un while interne rien la boucle fort externe inutile: le tableau sera trie et on ne rentrera plus dans le while de toute facon.


---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

Marsh Posté le 18-11-2010 à 14:56:03    

merci je crois avoir compris

Reply

Marsh Posté le 18-11-2010 à 15:30:44    

a ba non..

 

pourquoi le programme ne marche plus quand je fais ca?

 
Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.  int t[6]={2,25,1,4,18,6} ;
  7.  int i,j,temp ;
  8.  
  9.  int tbo= 0 ;
  10.  int taille = 6;
  11.  
  12.  for (j=taille-2; (j>=0) && (tbo==0); j--) tbo=1;
  13.  
  14.  for( i=0; i <=j; i++) {
  15.    if(t[i] > t[i+1]) {
  16.      temp = t[i] ;
  17.      t[i]=t[i+1] ;
  18.      t[i+1]= temp ;
  19.      tbo=0;
  20.    }
  21.  }
  22.  
  23.  for (i=0; i<6; i++) printf("-%d",t[i]);
  24. }


Message édité par gilou le 18-11-2010 à 16:03:15
Reply

Marsh Posté le 18-11-2010 à 16:00:26    

J'ai juste reformaté le code en quelque chose de lisible.
On voit tout de suite que la première boucle for ne sert a rien ou presque...
Bref un bon formatage fait voir qu'il y a problème.
A+,


Message édité par gilou le 18-11-2010 à 16:02:24

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 18-11-2010 à 22:51:05    

Code :
  1. for (j=taille-2; (j>=0) && (tbo==0); j--) tbo=1;


 
Pourquoi tu mets taille-1 fois tbo à 1 ??  :pt1cable:
 
EDIT: Ah non tu le fais qu'une foi en fait!  [:jsuistropcon]


Message édité par h3bus le 18-11-2010 à 22:54:56

---------------
sheep++
Reply

Sujets relatifs:

Leave a Replay

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