probleme tri par fusion de tableau

probleme tri par fusion de tableau - C++ - Programmation

Marsh Posté le 03-03-2008 à 21:17:07    

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.

Reply

Marsh Posté le 03-03-2008 à 21:17:07   

Reply

Marsh Posté le 03-03-2008 à 22:23:14    

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
Reply

Marsh Posté le 03-03-2008 à 22:28:35    

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


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 04-03-2008 à 09:04:51    

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

Reply

Marsh Posté le 04-03-2008 à 09:11:20    

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 -
Reply

Marsh Posté le 04-03-2008 à 12:37:10    

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

Reply

Marsh Posté le 04-03-2008 à 12:49:19    

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 -
Reply

Marsh Posté le 04-03-2008 à 12:55:34    

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.

Reply

Marsh Posté le 23-10-2009 à 04:31:11    

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.

Reply

Marsh Posté le 23-10-2009 à 07:02:38    

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.

Reply

Marsh Posté le 23-10-2009 à 07:02:38   

Reply

Marsh Posté le 23-10-2009 à 07:46:01    

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.
 
   
 

Reply

Marsh Posté le 23-10-2009 à 08:42:17    

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
Reply

Marsh Posté le 23-10-2009 à 08:57:50    

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.

Reply

Marsh Posté le 23-10-2009 à 09:34:07    

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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed