Exercice langage C fonctions Tri par sélection d'un tableau
Exercice 1 Tri par sélection
Ecrire la fonction TRI_SELECTION qui trie un tableau de N entiers par la méthode de sélection directe du maximum (voir exercice 7.14). La fonction fera appel à la fonction PERMUTER (définie dans le cours) et à la fonction MAX3 (définie dans l'exercice précédent).
Ecrire un programme pour tester la fonction TRI_SELECTION.
Exercice 2
Ecrire la fonction INSERER qui place un élément X à l'intérieur d'un tableau qui contient N éléments triés par ordre croissant, de façon à obtenir un tableau à N+1 éléments triés par ordre croissant. La dimension du tableau est incrémentée dans la fonction INSERER.
Ecrire un programme profitant des fonctions définies plus haut pour tester la fonction INSERER.
#include
main()
{
/* Prototypes des fonctions appelées */
void TRI_SELECTION(int *T, int N);
void LIRE_TAB (int *TAB, int *N, int NMAX);
void ECRIRE_TAB (int *TAB, int N);
/* Variables locales */
int T[100]; /* Tableau d'entiers */
int DIM; /* Dimension du tableau */
/* Traitements */
LIRE_TAB (T, &DIM, 100);
printf("Tableau donné : \n");
ECRIRE_TAB (T, DIM);
TRI_SELECTION(T, DIM);
printf("Tableau trié : \n");
ECRIRE_TAB (T, DIM);
return 0;
}
void TRI_SELECTION(int *T, int N)
{
/* Prototypes des fonctions appelées */
void PERMUTER(int *A, int *B);
int *MAX3(int *TAB, int N);
/* Variables locales */
int I; /* rang à partir duquel T n'est pas trié */
/* Tri par sélection directe du maximum */
for (I=0 ; I PERMUTER(T+I, MAX3(T+I,N-I) );
}
int *MAX3(int *TAB, int N)
{
. . .
}
void PERMUTER(int *A, int *B)
{
. . .
}
void LIRE_TAB (int *TAB, int *N, int NMAX)
{
. . .
}
void ECRIRE_TAB (int *TAB, int N)
{
. . .
}
#include
main()
{
/* Prototypes des fonctions appelées */
void INSERER(int X, int *T, int *N);
void LIRE_TAB (int *TAB, int *N, int NMAX);
void ECRIRE_TAB (int *TAB, int N);
/* Variables locales */
int T[100]; /* Tableau d'entiers */
int DIM; /* Dimension du tableau */
int A; /* Nombre à insérer */
/* Traitements */
LIRE_TAB (T, &DIM, 100);
printf("Tableau donné : \n");
ECRIRE_TAB (T, DIM);
printf("Introduire le nombre à insérer : ");
scanf("%d", &A);
INSERER(A, T, &DIM);
printf("Tableau résultat : \n");
ECRIRE_TAB (T, DIM);
return 0;
}
void INSERER(int X, int *T, int *N)
{
/* Variables locales */
int I;
/* Insertion de X dans le tableau T supposé trié: */
/* Déplacer les éléments plus grands que X d'une */
/* position vers l'arrière. */
for (I=*N ; I>0 && *(T+I-1)>X ; I--)
*(T+I) = *(T+I-1);
/* X est copié à la position du dernier élément déplacé */
*(T+I)=X;
/* Nouvelle dimension du tableau: */
(*N)++; /* Attention aux parenthèses ! */
}
void LIRE_TAB (int *TAB, int *N, int NMAX)
{
. . .
}
void ECRIRE_TAB (int *TAB, int N)
{
. . .
}