Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1324 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  probleme tri par fusion de tableau

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme tri par fusion de tableau

n°1696589
clem624
Posté le 03-03-2008 à 21:17:07  profilanswer
 

Bonjour, j'ai à faire un tri de tableau par tri par fusion, mais j'ai un probleme voici ce que me retourne le tri lorsque je rentre 1 ou une valeur>9 comme valeur dans mon tableau.
 
-desktop:~/iut/algo/tri$ g++ -o fusion fusion.cc -lcgicc
-desktop:~/iut/algo/tri$ ./fusion  
9
5
8
7
8
23
4
3
 
 
 
3
4
5
7
8
-1208258560
8
9
 
 
 
Voici mon programme:
 
#include <iostream>
using namespace std;
 
void fusion(int tableau[],int deb1,int fin1,int fin2)
        {
        int table1[fin1-deb1+1];
        int deb2=fin1+1;
        int compt1=deb1;
        int compt2=deb2;
        int i;
         
         
 
        //on recopie les éléments du début du tableau
        for(i=deb1;i<=fin1;i++)
            {
            table1[i-deb1]=tableau[i];
            }
                         
        for(i=deb1;i<=fin2;i++)
            {        
           
           if (compt2==(fin2+1)) //c'est que tous les éléments du second tableau ont été utilisés
                {
                tableau[i]=table1[compt1-deb1]; //on ajoute les éléments restants du premier tableau
                compt1++;
                }
            else if (table1[compt1-deb1]<tableau[compt2])
                {
                tableau[i]=table1[compt1-deb1]; //on ajoute un élément du premier tableau
                compt1++;
                }
            else if(compt1!=deb2)
                {
                tableau[i]=tableau[compt2]; //on ajoute un élément du second tableau
                compt2++;
                }
            }
         
        }
         
 
void tri_fusion_bis(int tableau[],int deb,int fin)
        {
        if (deb!=fin)
            {
            int milieu=(fin+deb)/2;
            tri_fusion_bis(tableau,deb,milieu);
            tri_fusion_bis(tableau,milieu+1,fin);
            fusion(tableau,deb,milieu,fin);
            }
        }
 
void triFusion(int tableau[],int longueur)
     {
     if (longueur>0)
            {
            tri_fusion_bis(tableau,0,longueur-1);
            }
     }
 
int main()
{
  int t[50];
  t[0]=9;
  t[1]=5;
  t[2]=8;
  t[3]=7;
  t[4]=8;
  t[5]=23;
  t[6]=4;
  t[7]=3;
 for(int i=0;i<=7;i++)
    cout << t[i] <<endl;
cout<<endl<<endl<<endl;
  triFusion(t,8);
  for(int i=0;i<=7;i++)
    cout << t[i] << endl;
 
 
}
 
 
 
Je vous remercie d'avance pour votre aide.

mood
Publicité
Posté le 03-03-2008 à 21:17:07  profilanswer
 

n°1696611
Joel F
Real men use unique_ptr
Posté le 03-03-2008 à 22:23:14  profilanswer
 

balise code stp on y voit rien

 

ah oui, et tableau[n] c'ets moche :/ std::vector is not for the dogs :/

Message cité 1 fois
Message édité par Joel F le 03-03-2008 à 22:24:40
n°1696618
skeye
Posté le 03-03-2008 à 22:28:35  profilanswer
 

std::vector n'est probablement pas encore au programme de son dut...[:petrus75]


---------------
Can't buy what I want because it's free -
n°1696760
Joel F
Real men use unique_ptr
Posté le 04-03-2008 à 09:04:51  profilanswer
 

v_v faut vraiment que ej reprenne du tranxen quadn je lit ça :E

n°1696763
skeye
Posté le 04-03-2008 à 09:11:20  profilanswer
 

Joel F a écrit :

v_v faut vraiment que ej reprenne du tranxen quadn je lit ça :E


Heureusement que t'as jamais vu les cours de c++ auxquels j'avais eu droit à l'iut...il m'a fallu des mois pour voir une différence avec le C...[:joce]


---------------
Can't buy what I want because it's free -
n°1696904
Joel F
Real men use unique_ptr
Posté le 04-03-2008 à 12:37:10  profilanswer
 

c'est qd même pas SI compliqué qd même :|

n°1696910
skeye
Posté le 04-03-2008 à 12:49:19  profilanswer
 

Joel F a écrit :

c'est qd même pas SI compliqué qd même :|


ah ça je dis pas, hein...mais s'il est pas censé avoir vu ça en cours il l'utilisera pas...:D


---------------
Can't buy what I want because it's free -
n°1696918
Taz
bisounours-codeur
Posté le 04-03-2008 à 12:55:34  profilanswer
 

remplace ton tableau par un vector (facile), et remplace les t[i] par des t.at(i) (facile avec un outil genre regexxer). Compile, lance, et attend une exception.

n°1934729
FeverIT
Posté le 23-10-2009 à 04:31:11  profilanswer
 

Joel F a écrit :

balise code stp on y voit rien
 
ah oui, et tableau[n] c'ets moche :/ std::vector is not for the dogs :/


 
Salut juste pour la remarque de remplacer tableau par Vector. Tant que la personne n'a pas besoin de redimensionnement du tableau et que la taille du tableau est fixe. Pourquoi voulez vous qu'il change Tableau par Vector? Ne savez vous pas que la complexité devient plus grande. Vector est utilisé pour le cas de redimensionnement ou le cas d'un programme Multithreads.

n°1934730
Joel F
Real men use unique_ptr
Posté le 23-10-2009 à 07:02:38  profilanswer
 

FeverIT a écrit :


 
Salut juste pour la remarque de remplacer tableau par Vector. Tant que la personne n'a pas besoin de redimensionnement du tableau et que la taille du tableau est fixe. Pourquoi voulez vous qu'il change Tableau par Vector? Ne savez vous pas que la complexité devient plus grande. Vector est utilisé pour le cas de redimensionnement ou le cas d'un programme Multithreads.


 
Si on veut étaler son savoir, il serait de bon ton d'en avoir un vrai :o
Si t'avais lu le fil jusqu'au bout tu aurais vu le post de Taz sur ::at()
Et pelle d'argent pour un beau déterrage sans interet.
 
Je passe aussi sur le passage sur le multithread. vector n'a AUCUN support pour ça, il s'agit juste d'une encapsulation du concept de Dynamic Array.
Alors ouais, à la limite si il a pas besoin de resize, il utilise boost::array qui a la bonne semantique et qui se comporte proprement comme un objet de premiere classe.
 
Stop le bullshit, merci.

mood
Publicité
Posté le 23-10-2009 à 07:02:38  profilanswer
 

n°1934735
FeverIT
Posté le 23-10-2009 à 07:46:01  profilanswer
 

Joel F a écrit :


 
Si on veut étaler son savoir, il serait de bon ton d'en avoir un vrai :o
Si t'avais lu le fil jusqu'au bout tu aurais vu le post de Taz sur ::at()
Et pelle d'argent pour un beau déterrage sans interet.
 
Je passe aussi sur le passage sur le multithread. vector n'a AUCUN support pour ça, il s'agit juste d'une encapsulation du concept de Dynamic Array.
Alors ouais, à la limite si il a pas besoin de resize, il utilise boost::array qui a la bonne semantique et qui se comporte proprement comme un objet de premiere classe.
 
Stop le bullshit, merci.


 
Ce que j'essaye de dire c'est que utiliser Vector pour trier des entiers c'est du gâchis. Surtout si sur le plan pratique on a travaillé (durant mes études) sur la complexité et on a comparé Vector et Tableau simple, il s'est avéré que Vector prend plus de temps d'exécution.  
 
Vectors "Compared to arrays, they provide almost the same performance for these tasks, plus they have the ability to be easily resized. Although, they usually consume more memory than arrays when their capacity is handled automatically (this is in order to accomodate for extra storage space for future growth)."
http://www.cplusplus.com/reference/stl/vector/
 
Pour le conteneur Array, je sais pas faut voir dans la pratique.
 
Pour "Taz",

Citation :

remplace ton tableau par un vector


Il parlait des Vector::at() pas des array::at().
 
Si je dis encore du "bullshit" ça me ferait plaisir de me faire corriger.
 
   
 

n°1934742
Joel F
Real men use unique_ptr
Posté le 23-10-2009 à 08:42:17  profilanswer
 

FeverIT a écrit :


Ce que j'essaye de dire c'est que utiliser Vector pour trier des entiers c'est du gâchis. Surtout si sur le plan pratique on a travaillé (durant mes études) sur la complexité et on a comparé Vector et Tableau simple, il s'est avéré que Vector prend plus de temps d'exécution.


Ce qui est faux en général. La seule chose qui prend du temps dans vector c'ets sa construction qui pré-remplit le vectro alors que souvent on en a pas besoin. En régime nominal, les acces/copie/resize prenne le meme temps qu'en C :€ Et je vois pas en quoi la complexité de l'acces à evctor (conteneur contigue) est differente de celle de T[N]. Tu confondrais pas avec Vector de JAVA ?
Ensuite, y a pas de notion de gachis. On est dans un langage avec des entités de haut-niveaux, on les utilise point. Sinon t'as le droit d'aller en cat assembleur.

 
FeverIT a écrit :


Pour le conteneur Array, je sais pas faut voir dans la pratique.


boost::array<T,N> est un POD encapsulant T[N] donc y a rien a voir, c'est identique en perf.

 
FeverIT a écrit :


Pour "Taz",

Citation :

remplace ton tableau par un vector


Il parlait des Vector::at() pas des array::at().

 

... y a pas de at sur des tableaux C. Encore une fois C++ != JAVA hein :o
L'idée ici était de se servir de l'accés protégé par at pour detecter sous forme d'exception les erreurs d'accés ...
Lire c'ets bien, comprendre c'ets mieux.

Message cité 1 fois
Message édité par Joel F le 23-10-2009 à 08:45:05
n°1934745
FeverIT
Posté le 23-10-2009 à 08:57:50  profilanswer
 

Joel F a écrit :


Ce qui est faux en général. La seule chose qui prend du temps dans vector c'ets sa construction qui pré-remplit le vectro alors que souvent on en a pas besoin. En régime nominal, les acces/copie/resize prenne le meme temps qu'en C :€ Et je vois pas en quoi la complexité de l'acces à evctor (conteneur contigue) est differente de celle de T[N]. Tu confondrais pas avec Vector de JAVA ?
Ensuite, y a pas de notion de gachis. On est dans un langage avec des entités de haut-niveaux, on les utilise point. Sinon t'as le droit d'aller en cat assembleur.
 


 

Joel F a écrit :


boost::array<T,N> est un POD encapsulant T[N] donc y a rien a voir, c'est identique en perf.
 


 

Joel F a écrit :


 
... y a pas de at sur des tableaux C. Encore une fois C++ != JAVA hein :o
L'idée ici était de se servir de l'accés protégé par at pour detecter sous forme d'exception les erreurs d'accés ...
Lire c'ets bien, comprendre c'ets mieux.


 
 
Merci pour l'effort de réponse, ça aide à comprendre des choses. Y'a juste un truc qui cloche c'est "Lire c'est bien, comprendre c'est mieux".  
Ce n'est pas une honte de ne pas comprendre vous savez, la personne devient bête du moment où elle n'essaye pas de comprendre.  
Et autre chose celui qui comprend et en expliquant il lance des trucs du genre "bullshit" aux gens et qui tutoie les gens alors qu'ils les connaient pas ça c'est bas niveau cher monsieur classe.
 
Bonne journée et navrée de vous déranger.
Aider c'est un bonheur c'est pas un moyen pour discriminer les gens.

n°1934751
Joel F
Real men use unique_ptr
Posté le 23-10-2009 à 09:34:07  profilanswer
 

indice: :o a une semantique bien à lui ;)
Je ne rabroue personne, c'est le ton qui passe mal à l'ecrit et que :o essaye de transmettre.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  probleme tri par fusion de tableau

 

Sujets relatifs
Probleme javascript en rubyFond cellule tableau
Récupérer des données de word pour les archiver dans un tableau excelProblème d'affectation (lib - vc2005)
Problème afficher/montrer DIVProblème avec SAS
Problème connexion serveur sql serverProblème sauvegarde envoi de mails Lotus Notes dans macro VBA
VBA Excel, problème de filtre avec valeurs décimalescamera ip problème d'affichage
Plus de sujets relatifs à : probleme tri par fusion de tableau


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR