probleme de tri en c. efficacité de l'algorithme.. - C - Programmation
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 :
|
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 :
|
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?
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.
Marsh Posté le 18-11-2010 à 15:30:44
a ba non..
pourquoi le programme ne marche plus quand je fais ca?
Code :
|
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+,
Marsh Posté le 18-11-2010 à 22:51:05
Code :
|
Pourquoi tu mets taille-1 fois tbo à 1 ??
EDIT: Ah non tu le fais qu'une foi en fait!
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]);
}