IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Tableau rangé décroissant ou non


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2011
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Décembre 2011
    Messages : 2
    Par défaut Tableau rangé décroissant ou non
    Je n'arrive pas a faire cet exercice étant débutant en langage C

    Ecrire en C un programme qui saisit un tableau de 9 réels puis qui indique si les éléments de ce tableau sont triés en ordre décroissant ou non.

    Merci

  2. #2
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Par défaut
    Bonsoir,

    la première idée qui vient en général serait de comparer chaque élément aux reste du tableau, mais la complexité serait de O(n²) et c'est pas top.

    je penses qu'une bonne manière de faire serait de créer une copie du tableau que tu trie dans l'ordre croissant (quickSort est en O(n log n) je crois). Ensuite il te suffit de comparer chaque case de même indice. A la première différence, le tableau n'est pas croissant.

    Quick sort :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    void quickSort(float tableau[], int debut, int fin)
    {
        int gauche = debut-1;
        int droite = fin+1;
        const float pivot = tableau[debut];
     
        /* Si le tableau est de longueur nulle, il n'y a rien à faire. */
        if(debut >= fin)
            return;
     
        /* Sinon, on parcourt le tableau, une fois de droite à gauche, et une
           autre de gauche à droite, à la recherche d'éléments mal placés,
           que l'on permute. Si les deux parcours se croisent, on arrête. */
        while(1)
        {
            do droite--; while(tableau[droite] > pivot);
            do gauche++; while(tableau[gauche] < pivot);
     
            if(gauche < droite)
                echanger(tableau, gauche, droite);
            else break;
        }
     
        /* Maintenant, tous les éléments inférieurs au pivot sont avant ceux
           supérieurs au pivot. On a donc deux groupes de cases à trier. On utilise
           pour cela... la méthode quickSort elle-même ! */
        quickSort(tableau, debut, droite);
        quickSort(tableau, droite+1, fin);
    }

    le code n'est pas très simple dans cette version, mais essaie de le comprendre (pas de copié-collé tout con hein)


    Edit : encore mieux, je viens de voir que dans la SL (librairie standard (#include <stdlib.h>) ) il y a déjà une fonction quicksort : qsort.

    Donc tu fais saisir tes valeurs (utilise scanf pour commencer, tu verra ensuite qu'il y a des méthodes plus simples, mais un peu plus complexes, en terme de notion), tu trie ton tableau clone, tu fais une comparaison de chaque élément de même valeur d'indice (O(n)) et voilou.


    Bon courage,

  3. #3
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Ce n'est vraiment pas la peine de monter une usine à gaz pour si peu !
    Il suffit de vérifier que tab[i] >= tab[i+1] pour i = 0 à 7

  4. #4
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Par défaut
    ouio en effet je ne sais pas pourquoi je pensais qu'un chiffre pouvait être croissant au précédant mais pas au suivant et donc qu'il fallait vérifier pour chaque élément s'il est plus ou moins grand que le reste du tableau...

    Me aculpa c'était débile.

Discussions similaires

  1. Remplir un tableau à partir du rang 1 et non de 0
    Par Pirokkk dans le forum Collection et Stream
    Réponses: 12
    Dernier message: 10/01/2008, 18h09
  2. Tableau à double entrée ou non ?
    Par dj-julio dans le forum Général VBA
    Réponses: 1
    Dernier message: 13/12/2007, 08h52
  3. Tri d'un tableau en alphanumérique et non l'inverse
    Par Hecco dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 15/01/2007, 13h52
  4. [VBA-E] Accès à l'objet Range (oui puis non ?)
    Par gapgap dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 05/05/2006, 20h00
  5. Réponses: 3
    Dernier message: 24/04/2006, 16h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo