probleme tri par fusion de tableau - C++ - Programmation
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
Marsh Posté le 03-03-2008 à 22:28:35
std::vector n'est probablement pas encore au programme de son dut...
Marsh Posté le 04-03-2008 à 09:04:51
ReplyMarsh 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...
Marsh Posté le 04-03-2008 à 12:37:10
ReplyMarsh 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...
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.
Marsh Posté le 23-10-2009 à 04:31:11
Joel F a écrit : balise code stp on y voit rien |
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.
Marsh Posté le 23-10-2009 à 07:02:38
FeverIT a écrit : |
Si on veut étaler son savoir, il serait de bon ton d'en avoir un vrai
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.
Marsh Posté le 23-10-2009 à 07:46:01
Joel F 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.
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.
Marsh Posté le 23-10-2009 à 08:42:17
FeverIT 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.
FeverIT a écrit :
|
boost::array<T,N> est un POD encapsulant T[N] donc y a rien a voir, c'est identique en perf.
FeverIT a écrit :
|
... y a pas de at sur des tableaux C. Encore une fois C++ != JAVA hein
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.
Marsh Posté le 23-10-2009 à 08:57:50
Joel F a écrit : |
Joel F a écrit : |
Joel F a écrit : |
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.
Marsh Posté le 23-10-2009 à 09:34:07
indice: a une semantique bien à lui
Je ne rabroue personne, c'est le ton qui passe mal à l'ecrit et que essaye de transmettre.
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.