Tri d un vector en java

Fermé
fredo - 15 févr. 2008 à 11:57
 reponse - 6 févr. 2009 à 10:48
Bonjour,

J 'un un vector avec plusieurs élements et je souhaiterais effectuer un tri croissant sur le 3 element il s 'agit d une chaine de caracteres .
Je sais qu 'il existe une fonction genre : collection.sort ... mais je n 'arrive pas à l 'utiliser .

Voici mon code :
// je declare mon vector
public Vector v_tableau = new vector();
// j 'appelle une methode pour alimenter mon vector qui est de type vector
v_tableau = GetListeCP()
// et puis c 'est maintenant que je souhaite faire un tri du vector sur le 3 element mais je n y arrive pas
//c un truc comme ça :
collection.sort
.....


Savez vous comment doit on proceder
Merci de vos réponses
A voir également:

5 réponses

pb.barthe Messages postés 9 Date d'inscription samedi 23 décembre 2006 Statut Membre Dernière intervention 4 janvier 2023 9
17 févr. 2008 à 00:17
Salut,

Bon, je t'ai fait un petit programme tuto :
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.Vector;

public class SortableVectorOfString extends Vector implements Comparator{

	/*
	 * Numéro du caractère sur lequel on va trier
	 * (Attention, les indices commencent à 0)
	 */
	int numChar = 0;
	
	/*
	 * fonction de tri
	 */
	private void sortStringVector(int numChar){
		/*
		 * On précise le numéro du caractère à partir duquel doit se faire
		 * le tri
		 */ 
		this.numChar = numChar;
		/*
		 * Le 1er paramètre est le Vecteur à trier (moi-même)
		 * Le 2ème paramètre est le Comparator à utiliser pour cela...
		 * ... et c'est encore moi-même car j'implémente Comparator (ce
		 * qui m'oblige à remplir le contrat de Comparator qui stipule 
		 * que je dois fournir une méthode 'compare') 
		 */
		Collections.sort(this, this);
	}

	/* 
	 * Fonction de comparaison
	 * @param arg0 1er String à comparer
	 * @param arg1 2ème String à comparer
	 * @see java.util.Comparator#compare()
	 */
	public int compare(Object arg0, Object arg1) {
		String s0 = (String)arg0;
		String s1 = (String)arg1;
		/*
		 * Le plus pénible est de prendre en compte les cas où une des chaînes
		 * n'a pas la longueur minimum requise pour le tri à partir du n-ième
		 * caractère...
		 */
		if (s0.length() <= numChar) {
			// Si le 1er String n'a pas la longueur minimum requise
			if (s1.length() <= numChar) {
				// ... ni le 2ème : on dit qu'elles sont égales
				return 0;
			} else {
				// ... si le 2ème est à la maille : 
				//     on dit que le 1er est plus petite
				return -1;
			}
		} else {
			// Si le 1er String est assez grand
			if (s1.length() <= numChar) {
				// ... mais pas le 2ème : on dit que le 1er est plus grand
				return 1;
			} else {
				// Mais une fois ces cas traités, String fournit ce qu'il faut
				return s0.substring(numChar).compareTo(s1.substring(numChar));
			}
		}
	}

	/*
	 * Simple méthode d'affichage pour le test
	 */
	public void display(){
		System.out.println("===============================");
		System.out.println("Tri sur le car. " + numChar + ":");
		for (Iterator iterator = iterator(); iterator.hasNext();) {
			System.out.println(iterator.next());
		}
	}
	
	
	public static void main(String[] args) {
		// On crée l'objet
		SortableVectorOfString svs = new SortableVectorOfString();
		// On l'alimente un peu
		svs.add("QsDfghjklm");
		svs.add("AzErtyu");
		svs.add("WxCvbn");
		// 1er tri sur les chaînes complètes
		svs.sortStringVector(0);
		svs.display();
		// 2ème tri ne distingue pas "AzErtyu" de "WxCvbn"
		svs.sortStringVector(8);
		svs.display();
		// 3ème tri sur le 3ème car.
		svs.sortStringVector(2);
		svs.display();
		// 4ème tri ne distingue toujours pas "AzErtyu" de "WxCvbn"
		svs.sortStringVector(8);
		svs.display();
	}

	
}


Ca devrait afficher :
===============================
Tri sur le car. 0:
AzErtyu
QsDfghjklm
WxCvbn
===============================
Tri sur le car. 8:
AzErtyu
WxCvbn
QsDfghjklm
===============================
Tri sur le car. 2:
WxCvbn
QsDfghjklm
AzErtyu
===============================
Tri sur le car. 8:
WxCvbn
AzErtyu
QsDfghjklm


Bon courage pour la suite.

Note: indique quelle version de java tu utilise la prochaine fois ;-)
6
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
16 févr. 2008 à 13:48
Salut,
Pas clair ?
Ben, tu as ton tableau que tu souhaites trier qu'on va appeler tonTableau.
import java.util.Collections;
Collections.sort(tonTableau);

Je vois pas comment être plus clair.

Cordialement
1
yoann_tux Messages postés 437 Date d'inscription lundi 28 février 2005 Statut Membre Dernière intervention 24 juillet 2008 95
15 févr. 2008 à 12:06
Bon un petit tri vite fait

int i = 0;
vecteur tmp;
while (i< length)
{
//listevect -> tableau de vecteurs
//listevect[i] -> vecteur à l'indice i du tableau de vecteur listevect
//listevect[i][2] -> 3eme cordonnées du vecteur à l'indice i.....

//tu peux remplacer listevect[i][2] par une fonction genre listevect[i].getz(); qui te renverrais ta 3 eme coordonnées.


if(listevect[i][2] > listevect[i+1][2]){
tmp = listevect[i][2];
listevect[i][2] = listevect[i+1][2];
listevect[i+1][2] = tmp;
i = i - 1;
}
i++;
}


en gros je fait donc un bubble sort (tri à bulles)

0
Merci pour ta réponse mais je ne pense pas que je puisse l 'adapter en java .
En fait je veux sur une liste d 'un vecteur pouvoir trier un champ de caracteres par ordre croissant .
La seule méthode qui semble pouvoir le faire est la méthode collection.sort mais je n 'arrive pas à la mettre en place .
0
reponse > fredo
6 févr. 2009 à 10:48
void Tri(){




for (i=0; i<tab.length-1; i++){

double max;


//rechercher du max et sa position

max=tab[i];

int i0=i;

int j;

for (j=i+1; j<tab.length; j++){
if (tab[j] > max){

i0=j;
max=tab[j]; }
}

/**************************************/


/*************Permutation*************/
double f;

f=tab[i];
tab[i]=max;
tab[i0]=f; }


}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
15 févr. 2008 à 14:31
De mémoire, il me semble que Collections.sort est statique. Donc je dirais : Collections.sort(tonTableau);
import java.util.Collections; //ou quelque chose du genre

En espérant que ça marchera.
0

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

Posez votre question
yoann_tux Messages postés 437 Date d'inscription lundi 28 février 2005 Statut Membre Dernière intervention 24 juillet 2008 95
16 févr. 2008 à 10:29
C'est psa clair ce que tu veux faire...
tu peux mettre un exemple ?
0