Partage
  • Partager sur Facebook
  • Partager sur Twitter

tri rapide

récursivité

Sujet résolu
    15 juin 2019 à 13:26:31

    Bonjour,

    j'aurais besoin d'aide au niveau d'un exercice que je doit faire sur la récursivité.

    Je doit crée un algorithme du tri rapide avec pas mal de condition que rendent la chose assez compliqué (enfin je trouve)

    je doit utiliser :

    -une procédure "échanger" qui prend deux paramètres de type entier qui s’échange le contenue
    -une procédure "Déplacer" qui prend deux paramètres de type entier qui place le contenue du deuxième paramètre dans le premier
    -une fonction "partitionner" qui sépare en sous tableau les valeur, a gauche les plus petite que le pivot et a droite les plus grande qui prend en paramètre un tableau d'entier, un indice de début et un indice de fin et qui renvoie l'indice de la case contenant le pivot a la fin de l'opération
    -une procédure récursive "quicksort" qui prend en paramètre un tableau d'entier, un indice de début et un indice de fin
    -et une procédure afficher qui affiche le tableau

    #include <stdio.h>
    #include <stdlib.h>
    #define TAILLE 10
    
    void echanger(int *a, int *b);
    void deplacer(int *a, int *b);
    int partition (int tableau[], int debut, int fin);
    void quickSort(int tableau[], int debut, int fin);
    void afficher (int tableau[]);
    
    int main()
    {
        int tab[10] = {10,8,4,7,15,9,7,14,12,17};
        int i;
    
        quickSort(tab, 0, 9);
        afficher(tab);
        return 0;
    }
    
    void echanger(int *a, int *b)
    {
        int temp = *a;
        *a = *b;
        *b = temp;
    }
    
    void deplacer(int *a, int *b)
    {
        *a=*b;
    }
    
    int partition (int tableau[], int debut, int fin)
    {
        int indice=debut+1;
        int limite=fin;
        const int pivot=tableau[debut];
        while(indice<=limite)
        {
            if (tableau[indice]<pivot) {
                deplacer(&tableau[indice-1], &tableau[indice]);
                indice++;
                tableau[indice-1]=pivot;
            }
            else {
                if (tableau[indice]>=pivot) {
                    echanger(&tableau[indice], &tableau[limite]);
                    limite--;
                }
            }
        }
        return limite;
    }
    
    void quickSort(int tableau[], int debut, int fin)
    {
        int pivot=partition(tableau, debut, fin);
        if (pivot!=0) {
           quickSort(tableau, debut,pivot-1);
        }
        else {
            return;
        }
    }
    
    void afficher (int tableau[])
    {
        printf("\ntableau : ");
        for(int i = 0; i < 10; i++)
        {
    	printf("%d ", tableau[i]);
        }
    }
    


    A ce moment le programme trie la première moiter du tableau, mais je n'arrive pas a mettre en plus la récursivité de la deuxième partie du  tableau
    Je pensé mettre comme paramètre le tableau , le pivot, la fin. Mais ça ne marche pas j'ai testé différente possibilité mais je n'arrive pas à résoudre cet exercice

    du coup je fait appelle a vous, voir si vous pouvez m'aider

    Merci d'avance, et bon week-end

    ps: désolé pour les faute d'orthographe.

    • Partager sur Facebook
    • Partager sur Twitter

    tri rapide

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown