j'ai essayer de séparer les fonctions mais ca ne marche pas...
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#define MAX 1000000
/************************ tri rapide ****************************/
void init_tab(){
int i,nb,tab[MAX];
srand(time(NULL)); /* Initialisation du générateur aléatoire avec la fontion time */
printf("\n\n Nombre de valeurs a trier (du tableau) : ");
scanf("%d", &nb); /* Demande le nombre d'éléments à trier */
printf("\n");
for(i=0;i<nb;i++)
tab[i]=rand();
printf("Les valeurs avant le tri : ");
for(i=0; i<nb;i++)
printf("\n%d ",tab[i]);
}
void affich_tab(int tab[],int taille) {
int i;
printf("\n\nLes valeurs apres le tri :");
for(i=0; i<taille;i++)
printf("\n%d ",tab[i]);
}
// réordonne le tableau et rend l'indice de séparation
int permutation(int T[], int a, int b) {
int i, j, pivot, bi = a, bs = b, r, TI[b];
// choix du pivot
pivot = T[a];
for(i=a;i <= b;i++) {
if (T[i] < pivot) { TI[bi] = T[i]; bi++; }
if (T[i] > pivot) { TI[bs] = T[i]; bs--; }
}
/* On place le ou les pivots */
for(i=bi;i<=bs;i++) { TI[i] = pivot; }
/* recopie de TI */
for(i=a;i <= b;i++) {
T[i] = TI[i];
if (T[i] == pivot) { r = i; }
}
return r;
}
void rapide(int T[], int a, int b) {
int separe;
if (a < b) {
separe = permutation(T, a, b);
rapide(T, a, separe-1);
rapide(T, separe+1, b);
}
}
void tri_rapide() {
int i,nb,tab[MAX];
init_tab();
rapide(tab, 0, nb-1);
affich_tab(tab,nb);
system("PAUSE");
main();
}
/************************ programme principal ****************************/
int main()
{
/* déclarations */
int choix=0;
printf("\n\n\t\t\t ****************\n");
printf("\t\t\t *MENU PRINCIPAL*\n");
printf("\t\t\t ****************\n\n\n\n");
printf("\t TAPEZ :\n\n\n\n");
printf("\t\t6\t Pour :\t Lancer le prog de tri rapide\n\n");
printf("\t\t7\t Pour :\t Quitter le programme\n\n\n");
printf("\t CHOIX : ");
scanf("%d",&choix);
switch(choix)
{
case 6 : tri_rapide();
break;
case 7 : break;
}
}