tri d'un tableau 1D c++ - C++ - Programmation
Marsh Posté le 20-02-2005 à 11:56:07
ça n'est pas un tri. si tu veux faire un tri, extrait d'abord tes -1 et 0, tri le résultat, puis fusionne.
std::sort en tête
Marsh Posté le 20-02-2005 à 12:22:52
Merci pour ton indication. Mais en fait, si j'extrais les -1 et 0, trie et fusionne, j'aurai plus l'ordre que je souhaite avoir.
Marsh Posté le 20-02-2005 à 12:47:36
Bon voilà, je vais donner des details. En fait, il s'agit de chercher mis à part les -1 et 0, le minimum du tableau lui assigner 1 (à cette position), refaire la recherche du minimum sur le reste, lui assigner deux (à cette position) ainsi de suite jusqu'à ce que le tableau soit reassigné en entier.
Merci.
Marsh Posté le 20-02-2005 à 13:29:21
ben tu cris ton algo de tri voir mieux ton propre foncteur de tri pour le passer a std::sort
Marsh Posté le 20-02-2005 à 13:34:02
Joel F a écrit : ben tu cris ton algo de tri voir mieux ton propre foncteur de tri pour le passer a std::sort |
ça ne peut pas marcher
Marsh Posté le 21-02-2005 à 01:09:35
je ne comprend pas bien la demande :
il s'agit bien de remplacer le nombre par son rang en écartant les -1 et les 0 ...
Si oui, quel est l'algo que tu as utilisé pour savoir?
Marsh Posté le 21-02-2005 à 09:25:59
Tu peux essayer ceci :
Code :
|
Le tableau tab est initialisé ici mais on peut le remplir comme souhaité. Sa taille est ensuite calculée. On le parcours et, en différenciant les valeurs des éléments, on remplit 3 tableaux différemments. Seul le dernier est trié (list_f). Le tableay tab1 contient le résultat final car il a été remplis différemment selon l'indice de l'élément.
Cordialement
Marsh Posté le 21-02-2005 à 09:27:26
Bon, l'indentation est pas très bien passée et il faut lire :
// Affichage du tableau tab1
à la fin (le commentaire est incorrect)
Marsh Posté le 23-02-2005 à 10:40:31
Bonjour à tous, merci aux contributions, merci nathan_g.
Je reexpose le problème car çà n'est pas du tout un tri normal comme l'a traité nathan mais plutôt il s'agit bien de remplacer le nombre par son rang en écartant les -1 et les 0 dans le même tableau à leur position evidemment.
En fait, j'utilise un algorithme de parcours sur les graphes où à chaque fois je choisis le sommet en fonction de son etiquette. L'étiquette i étant la valeur du tableau correspondant au somme i. En triant, on ne doit pas decaler les valeurs, sinon on ne saurait à quel sommet telle ou telle etiquette correspond. Ensuite, le but c'est de transformer le tableau d'etiquettes en tableau de rang à chaque iteration car les etiquettes croissant vite, on risque un debordement.
Cordialement
Marsh Posté le 23-02-2005 à 20:29:07
Bonjour,
je pense qu'une méthode de tri standard est la bonne...
Il faudrait faire qqch du style :
- en une passe du tableau initial : construire un tableau de pointeurs sur une structure (ou classe comme on veut) qui contient à la fois la valeur et la position dans le tableau original (pour les valeurs strictement positives)
- on applique un tri sur le tableau obtenu (tri rapide ou tri fusion...) : quelque chose de similaire à ce qui est fait là haut.
- on reparcourt le tableau trié pour mettre le rang dans la position mise dans la structure...
Je pense pas que ça soit trop compliqué à mettre en oeuvre...
++
Marsh Posté le 24-02-2005 à 09:44:38
Je reexpose le problème car çà n'est pas du tout un tri normal comme l'a traité nathan mais plutôt il s'agit bien de remplacer le nombre par son rang en écartant les -1 et les 0 dans le même tableau à leur position evidemment.
J'ai pas tout compris ...
En fait, si je considère ton exemple du début (même s'il manque un morceau), tu demande à ce qu'on remplace les éléments différents de -1 et 0 par l'indice de leur rang dans la liste " list_f " triée (compté à partir de 1) ?
J'ai bon ?
Dans ce cas (après qqs correction aussi sur le programme initial) :
Code :
|
Je sais qu'il y a qqs problèmes de syntaxes (notamment des const qui manquent ...) mais ça doit fonctionner.
PS: Si tu as Visual C++ 6.0 comme moi, inutile d'essayer, ça ne fonctionnera pas. Même bien écrit, un tri de list avec un foncteur donne un tri faux ! Par contre, sous gcc ce programme a l'air de marcher.
Marsh Posté le 20-02-2005 à 11:44:56
Bonjour à tous,
Quelqu'un pourrait m'aider à trier ce tableau en c++ comme suit:
tab={-1, -1, 0,0 ,17,25,-1,8,0,28} en tab={-1,-1,0,0,2,3,-1,1,4 }.
C'est à dire à reassigner les elements du tableau par ordre de grandeur sans toucher aux 0 et -1.
Je suis confronté à un debordement de capacité de type int, ce qui m'oblige à reassigner mon tableau à chaque iteration.
Je vous remercie d'avance.