#include <time.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#define NMAX 400
/*Prototypes de fonctions*/
void gen_jd3(int v[], int n);
void gen_jd2(int v[], int n);
void gen_jd1(int v[], int n);
void affresul( int v[], int n );
void tri_bulle(int v[], int n);
main()
{
char rep;
int n; /* pour le nombre actif de postes du vecteur */
int v[NMAX];
int ok;
char s[80];
int choix =0 ;
int ok2;
srand (time(NULL));
do
{
printf( "\n\t\tTRI\n\n" );
do
{
printf( "Entrer un nombre positif de 1 a %d : ", NMAX - 1 );
ok = scanf( "%d", &n ); //pour recommencer la boucle mettre le scanf dans une variable. Meilleur que le while avec comparaison sur la variable
gets(s);
}while( ! ok || n < 1 || n >= NMAX );
do
{
printf ("Choix 1 : sens inverse, Choix 2 : sens normal, Choix 3 : generation aleatoire\n");
ok2 = scanf ("%d",&choix);
gets(s);
if (choix == 2)
gen_jd1( v , n); //appel de la fonction de generation
else if (choix == 1)
gen_jd2( v , n);
else if (choix == 3)
gen_jd3(v, n);
else
ok2 = 0;
}while( !ok2 );
printf( "\nAvant le tri" );
affresul( v, n); //appel pour afficher avant le tri
tri_bulle(v, n); //appel du triage par bulle (inversement de max)
printf( "\nApres le tri" );
affresul( v, n); //appel apres le tri
printf( "\nRecommencer (o/n) ?" );
//gets(s);
scanf( "%c", &rep );
gets(s);
}while( tolower( rep ) != 'n' );
printf("Appuyer sur une touche pour continuer");
getchar();
// getchar();
return;
}
void gen_jd3(int v[], int n)
{ int i;
for (i=0; i<n; i=i+1)
v[i]= rand()-rand();
v[i]= i; //met dans l'ordre inverse.
}
/****Generation sens_inverse****/
void gen_jd2(int v[], int n)
{ int i;
for (i=0; i<n; i=i+1)
v[i]= n-i; //met dans l'ordre inverse.
}
/****Generation sens_normal****/
void gen_jd1(int v[], int n)
{ int i;
for (i=1; i<=n; i=i+1)
v[i]= i; //met dans l'ordre normal.
}
/****Tri_a_bulle****/
void tri_bulle(int v[], int n) //Le tri a bulle inverse les elements 2 a 2.On a donc l'element le plus grand a droite a chaque fois que l'on recompare.
{ int i ,j , temp;
for (i=0; i<(n-1); i++) //On enleve une case car on commence a 0
{
for (j=1; j<(n-i); j++) // On recommence la boucle avec une case en moins
{
if (v[j-1]>v[j]) //Echange de variable
{
temp =v[j];
v[j]= v[j-1];
v[j-1]=temp;
}
}
}
}
/****Affichage****/
void affresul( int v[], int n ) //Fonction d'affichage du tableau avant
{
int i;
printf( "\nle vecteur est: \n" );
for( i =0; i < n; i++ ) printf( "%7d ", v[i] );
}