Tri fusion
Résolu/Fermé
A voir également:
- Tri fusion
- Tri excel - Guide
- Display fusion - Télécharger - Divers Utilitaires
- Fusion pdf - Guide
- Logiciel tri photo gratuit - Guide
- Fusion mp3 - Télécharger - Audio & Musique
3 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
21 nov. 2010 à 20:34
21 nov. 2010 à 20:34
Deux erreurs principales qui te posent problème :
1) Ton affichage, et l'appel à la méthode fichier sont utilisés dans une partie du code qui n'est jamais appelée : tu as un return avant !
2) Tu as oublié les accolades de la boucle for(i=0;i_g<taille_g && i_d<taille_d;i++)
Ensuite il y a un certain nombre de petites choses à corriger qui misent bout-à-bout peuvent elles aussi générer des erreurs, comme par exemple utiliser deux fois le même nom pour deux variables distinctes !
En corrigeant les erreurs, et en faisant "un peu" de ménage, j'obtient ceci :
1) Ton affichage, et l'appel à la méthode fichier sont utilisés dans une partie du code qui n'est jamais appelée : tu as un return avant !
2) Tu as oublié les accolades de la boucle for(i=0;i_g<taille_g && i_d<taille_d;i++)
Ensuite il y a un certain nombre de petites choses à corriger qui misent bout-à-bout peuvent elles aussi générer des erreurs, comme par exemple utiliser deux fois le même nom pour deux variables distinctes !
En corrigeant les erreurs, et en faisant "un peu" de ménage, j'obtient ceci :
import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; public class Fusion1 { private static int traceA, traceB; //******************************************************************* private static void fichier(int taille, String nomFichier) throws IOException { BufferedWriter out = new BufferedWriter( new FileWriter( new File(nomFichier),true ) ); out.write(taille+"\t"+traceA+"\t"+traceB); out.newLine(); out.close() ; } //******************************************************************* private static int[] random(int T[], int taille) { for(int i=0; i<taille; i++) { T[i]=(int)(Math.random()*(512-2)+2); } return T; } //******************************************************************* private static int[] fusion(int[] tab1, int[] tab2) { int i, i_g=0, i_d=0; int taille_g=tab1.length, taille_d=tab2.length; int [] res=new int[taille_g+taille_d]; for(i=0; i_g<taille_g && i_d<taille_d; i++) { traceB++; if(tab1[i_g] <= tab2[i_d]) { traceA++; res[i]=tab1[i_g++]; } else { res[i]=tab2[i_d++]; } } // on copie le reste du tableau de gauche (s'il reste quelque chose) while(i_g<taille_g) { res[i++]=tab1[i_g++]; // Ne pas oublier le ++ (boucle infinie) } while(i_d<taille_d) { res[i++]=tab2[i_d++]; // Pareil c'est tab2 } return res; } //******************************************************************* private static int[] copie(int[] tab, int debut, int fin) { int[] res=new int[fin-debut+1]; for(int i=debut; i<=fin; i++) { res[i-debut]=tab[i]; } return res; } //******************************************************************* public static int[] tri_fusion(int[] tab,int taille) { if(taille<=1) return tab; else { int milieu = taille/2; int[] gauche = copie(tab,0,milieu-1); int[] droite = copie(tab,milieu,taille-1); return fusion(tri_fusion(gauche,milieu), tri_fusion(droite,(taille-milieu))); } } //******************************************************************* private static void afficher(int[] tab) { for (int i=0; i<tab.length; i++) System.out.print(tab[i]+" "); System.out.println(); } private static void test(int i, String nomFichier) throws IOException { int[] T=new int[i]; random(T,i); traceA=0; traceB=0; afficher(tri_fusion(T,i)); fichier(i,nomFichier); } public static void main (String []args) throws IOException { for (int i=2; i<512; i++) test(i,"C:\\tri-fusion-qcque.txt"); } }
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
21 nov. 2010 à 21:12
21 nov. 2010 à 21:12
La méthode fichier y était déjà, je n'y ai quasiment pas touché, je l'ai juste appelé au bon moment. Elle ouvre le fichier et ajoute à la fin les valeurs de taille, traceA et traceB
Quant à test, c'est un mélange de la partie du code de main et de celui qui était "caché" dans fusion et jamais appelé. Elle créé un tableau aléatoire, le tri, et enregistre les traces dans le fichier.
Quant à test, c'est un mélange de la partie du code de main et de celui qui était "caché" dans fusion et jamais appelé. Elle créé un tableau aléatoire, le tri, et enregistre les traces dans le fichier.
21 nov. 2010 à 21:04
svp je pas compris l 'utilité de la methode fichier et la methode test