Fonction trier( int tab[])

Résolu
feno -  
 feno -
Bonjour,

j'aimerais savoir comment je dois procéder pour écrire ma méthode trier(int tab[]) qui prend un tableau en paramètre et qui ordonne les éléments de ce tableau dans l'ordre croissant. voici ce que j'ai essayé , mais mon programme ne fonctionne pas ; j'ai besoin de votre aide merci :



import java.util.*;
public class trie
{
public static void main(String []agrs)
{ int tab[]={5,3,1,6,4,2};
trier(tab);
for(int i=0;i<tab.length;i++)
{ System.out.println(tab[i]);
}

}

public static void trier(int tab[])
{
int taille=tab.length;
int n=0;
int m=0;
int tmp[]=new int[taille];
// int []t=new int[tab.length()];



for(int i=0;i<taille;i++)
{ while(n!=taille)
{ if(tab[i]==tab[n])
{ n++;
}
else if(tab[i]<tab[n])
{ n++;
}
else if(tab[i]>tab[n])
{ n=taille;}

else if(tab[i]==0)
{ n++;}
}

tmp[m]=tab[i];
tab[i]=0;
m++;
}

for(int i=0;i<taille;i++)
{
tab[i]=tmp[i];

}
}
}
A voir également:

8 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
1) C'est public static void main(String args[])
2) Le passage par référence void trier(int tab[]) ne permet pas de modifier tab.

Autre exemple :
public static void doubler(int tab[])
{
	for(int i=0; i<tab.length; i++) 
	{
		tab[i]=tab[i]*2;
	} 
}
	
public static void main(String args[]) 
{	
	int tab[]={1,2,3,4,5}; 
	doubler(tab); 
	for(int i=0; i<tab.length; i++) 
		System.out.println(tab[i]); // 1 2 3 4 5 (et non 2 4 5 6 8 10)
}

Pour que ça marche tu dois faire une méthode tab[] trier(int tab[]) en renvoyant le tableau trié en retour, ce qui va te changer pas mal ton code...
1
Utilisateur anonyme
 
Salut,

Dans ton cas de données comparables tu peux utiliser la classe Arrays:

Arrays.sort(tonTableau); // Import java.util.Arrays


Et ta méthode trier devient:

public static void trier(int tab[]) 
      {
         Arrays.sort(tab);
      }


Cordialement,

Dan
1
feno
 
Salut Dan,

J'ai écris ce message pour vous dire que vous venez de me donner la clé qui me permettra de finaliser mon programme.

Cordialement,

Feno
1
feno
 
bonjour KX,
d'abord j'aimerais te remercier pour ta bonne foie à vouloir apporter ta part de participation au progrès de cette branche qui est l'informatique. Je crois que j'ai mal exposé mon problème au début , mais je souhaite écrire une méthode trie(int tab[]) qui prend en paramètre un tableau tab[] qui est remplir préalablement de façon aléatore, puis qui trie ce tableau et ordonne ces éléments dans l'ordre croissant (par rapport à leur distance à 0).
exemple: tab[]={6,2,4,1,5,2} après le trie par la fonction trie(int tab[]), notre tab[]={1,2,2,4,5,6}.
j'espère que cette fois j'ai exposé mon problème plus simplement lol ;-).

coordialement KX
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
J'ai bien compris, mais ce que j'ai dis c'est que tu ne peux pas modifier un int[] passé en paramètre de ta fonction. J'ai mis l'exemple de la fonction doubler parce que c'est une manière simple de voir que le tableau n'est pas modifié au sortie de la fonction.

Il y a plusieurs moyen d'arriver au résultat, ça dépend de ton niveau :
* passer le tableau trié au retour de la fonction, et ainsi faire tab=trie(tab);
* utiliser des objets Integer plutôt que int, ainsi tu pourras avoir un Integer[] tab en paramètre d'entrée et pouvoir le modifier directement (par exemple, ma méthode doubler marcherait si je remplace int[] par Integer[])
* mettre ton tableau comme membre de la classe, auquel cas il faudra enlever le mot clé static et faire des constructeurs et accesseurs au tableau pour le manipuler avec this.
* utiliser directement les méthodes existantes de tris (Collections.sort par exemple)
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Je viens de regarder un peu plus attentivement ton code, et j'ai quelques remarques :

1) pour mettre en application la résolution du problème sur les tableaux que j'ai déjà énoncé, on peut tout simplement faire un return tmp; à la place de la dernière boucle for.

2) n est modifié (n++ ou n=taille), on lui applique une jolie boucle while, mais on ne l'utilise jamais ! Autant dire que ta boucle while ne sert à rien... on enlève !

3) m est initialisé à 0 et incrémenté à chaque tour de le boucle for, autant dire qu'on a toujours m==i, on peut donc le remplacer.

4) Avec les modifications faites, voici ce qui reste d'utile dans ta méthode de tri :

public static int[] trier(int tab[])   
{   
	int taille=tab.length;   
	int tmp[]=new int[taille];    

	for(int i=0; i<taille; i++)   
	{     
		tmp[i]=tab[i];   
		tab[i]=0;   
	}   

	return tmp;  
}

Autant dire que ta méthode ne fait rien à part recopier tab dans tmp...
La confiance n'exclut pas le contrôle
0
feno
 
Merci KX , tu viens de me donner une idée qui me permettra de réaliser mon programme en créant une class Tableau qui me permettra de manipuler mon taleau tab[]. Merci pour les conseils ;-)
0
feno
 
Salut Dan,

J'ai écris ce message pour vous dire que vous venez de me donner la clé qui me permettra de finaliser mon programme. Merci beaucoup ;-)

Cordialement,

Feno
0