Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2860 connectés 

  FORUM HardWare.fr
  Programmation
  C

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°2036883
mikado100
Posté le 18-11-2010 à 13:52:07  profilanswer
 

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]);
}
 
 
 

mood
Publicité
Posté le 18-11-2010 à 13:52:07  profilanswer
 

n°2036899
Un Program​meur
Posté le 18-11-2010 à 14:27:58  profilanswer
 

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)
n°2036902
mikado100
Posté le 18-11-2010 à 14:39:58  profilanswer
 

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?

n°2036906
Un Program​meur
Posté le 18-11-2010 à 14:44:23  profilanswer
 

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)
n°2036910
mikado100
Posté le 18-11-2010 à 14:56:03  profilanswer
 

merci je crois avoir compris

n°2036917
mikado100
Posté le 18-11-2010 à 15:30:44  profilanswer
 

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
n°2036934
gilou
Modérateur
Modzilla
Posté le 18-11-2010 à 16:00:26  profilanswer
 

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é!  --
n°2037041
h3bus
Troll Inside
Posté le 18-11-2010 à 22:51:05  profilanswer
 

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++

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

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

 

Sujets relatifs
Probleme taille de log oracleproblème référencement sur google
Problème sur ma page webprobleme de SharpSsh avec C#
Problème de "goto" en batch...[RESOLU] vtable error
problème de Thread javaProblème de temps d'execution qui "jump"
Problème au lancement index.phpprobleme saut de ligne avec scanf
Plus de sujets relatifs à : probleme de tri en c. efficacité de l'algorithme..


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR