(probl) Tri d une liste

elninoca Messages postés 1 Date d'inscription lundi 14 décembre 2009 Statut Membre Dernière intervention 16 juin 2010 - 16 juin 2010 à 21:08
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 - 22 juin 2010 à 19:28
Bonsoir,
jai un probleme avec le tri insertion d une liste en java !!

jai cette liste :

Student s1 = new Student("patrick" , "b" , 444426160);
Student s2 = new Student("Andre" , "b" , 2426161);
Student s3 = new Student("Celine" , "a" , 3426162);

List<Student> l = new LinkedList<Student>();

l.add(s1);
l.add(s2);
l.add(s3);




voila le probleme :


on me demande de creer une classe qui contient l algorithme , de tri insertion , afin qu on puisse trier une liste d etudiant.
l algorithme commence par creer une nouvelle liste , puis on effectue les etapes necessaires pour trier l autre liste.
je n ai absolument aucune idee , comment implementer cet algorithme "tri Insertion "
, c est la premier fois que jai a faire avec des listes .

quelq'un peut m aider svp ?

j ai construit la classe " Student " : qui contient le nom , le prenom et le numero d un etudiant.


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

public final class Student {


String lastname = null;
String name = null;
int studentNumber;

Student (String name, String lastname, int studentNumber ) {
this.lastname = lastname;
this.name = name;
this.studentNumber = studentNumber;

}

public String toString() {
String str = null;
str = "" + Integer.toString(studentNumber);
str = name +" "+ lastname +" "+ str;
return str;

}

}





ensuite la classe CompareByNumber qui implemente l interface Comparator :

/**************************************************************************
import java.util.Comparator;
public class CompareByNumber implements Comparator<Student> {

public int compare(Student s1, Student s2) {
int result = 0;
Student stu1 = (Student) s1;
Student stu2 = (Student) s2;
if (stu1.studentNumber > stu2.studentNumber) {
result = 1;
return result;
} else
if (stu1.studentNumber < stu2.studentNumber) {
result = -1;
return result;
} else {
return 0;
}
}
}



el la , la classe CompareByLastname qui implemente elle aussi l interface Comparator<Student>

/**********************************************************************
import java.util.Comparator;
public class CompareByLastname implements Comparator<Student> {

public int compare(Student s1, Student s2) {

Student stu1 = (Student) s1;
Student stu2 = (Student) s2;

int result = stu1.lastname.compareTo(stu2.lastname);

if (result == 0) {
result = stu1.name.compareTo(stu2.name);
}
return result;

}
}

2 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
22 juin 2010 à 19:27
Le tri par insertion est expliqué ici http://fr.wikipedia.org/wiki/Tri_par_insertion#Description_de_l.27algorithme tu as même l'algorithme qu'il ne te reste qu'à traduire en java.

Quelques remarques :
Au lieu de creer une fonction public int compare(Student s1, Student s2), tu devrais plutot surcharger compareTo dans la classe étudiant
//Classe Etudiant
public int compareTo(Student s2) {
int result = stu1.lastname.compareTo(stu2.lastname);
if (result == 0) {
result = stu1.name.compareTo(stu2.name);
}
return result;
} 


Et comme ca, tu peux utiliser le compareTo sur tes étudiants. Qui plus est les lignes
Student stu1 = (Student) s1;
Student stu2 = (Student) s2;
Ne servent à rien et sont assez étranges, pourquoi un cast ici ? Et inutile de copier les références de tes varialbes


Ta fonction toString n'est pas géniale
public String toString() {
String str = null;
str = "" + Integer.toString(studentNumber);
str = name +" "+ lastname +" "+ str;
return str;

Il vaudrait mieux utiliser cette forme plus compacte
public String toString() {
return studentNumber+" "+name+" "+lastname;
return str; 


Et une dernière chose, évite d'initialiser tes paramètres à null, ca pourrait te jouer des tours...
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
22 juin 2010 à 19:28
J'ai fait une petite erreur pour la méthode toString, il faut mettre
public String toString() {
   return studentNumber+" "+name+" "+lastname;
}
0
Rejoignez-nous