Téléchargement
illégal
Posez votre question Signaler

Tri d un vector en java

fredo - Dernière réponse le 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
Lire la suite 

Tri d un vector en java »

7 réponses
Réponse
+5
moins plus
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 ;-)
Ajouter un commentaire
Réponse
+1
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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)

fredo - 15 févr. 2008 à 14:14
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 .
reponse - 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; }


}
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
C'est psa clair ce que tu veux faire...
tu peux mettre un exemple ?
Ajouter un commentaire
Ce document intitulé « tri d un vector en java » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?