83 lines
1.1 KiB
Java
83 lines
1.1 KiB
Java
import java.util.*;
|
|
|
|
public class Fusion<T extends Comparable<T>> {
|
|
|
|
|
|
private Queue<T> scinder(Queue<T> file){
|
|
|
|
Queue<T> moitie = new LinkedList<>();
|
|
|
|
int taille = file.size()/2;
|
|
|
|
for(int i=0; i<taille; i++){
|
|
|
|
|
|
moitie.add(file.remove());
|
|
|
|
}
|
|
|
|
return moitie;
|
|
|
|
}
|
|
|
|
private Queue<T> fusionner(Queue<T> file1, Queue<T> file2){
|
|
|
|
Queue<T> fusion = new LinkedList<>();
|
|
|
|
while(!file1.isEmpty()&&!file2.isEmpty()){
|
|
|
|
if (file1.peek().compareTo(file2.peek()) <= 0){
|
|
|
|
fusion.add(file1.remove());
|
|
|
|
}
|
|
|
|
else{
|
|
|
|
fusion.add(file2.remove());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
fusion.addAll(file1);
|
|
fusion.addAll(file2);
|
|
|
|
return fusion;
|
|
|
|
|
|
|
|
}
|
|
|
|
private Queue<T> trier(Queue<T> file){
|
|
|
|
if(file.size()<=1){
|
|
|
|
return file;
|
|
}
|
|
|
|
Queue<T> moitie = scinder(file);
|
|
Queue<T> gauche = trier(moitie);
|
|
Queue<T> droite = trier(file);
|
|
|
|
return fusionner(gauche,droite);
|
|
|
|
|
|
}
|
|
|
|
public static void main(String[] args) {
|
|
Queue<Integer> file = new LinkedList<>();
|
|
file.add(5);
|
|
file.add(2);
|
|
file.add(9);
|
|
file.add(1);
|
|
|
|
Fusion<Integer> tri = new Fusion<>();
|
|
Queue<Integer> resultat = tri.trier(file);
|
|
|
|
System.out.println("File triée : " + resultat);
|
|
}
|
|
}
|
|
|
|
|