Voici une méthode d'aide pour faire le travail.
Tout d'abord, vous aurez besoin d'une nouvelle interface Comparator, comme suit Comparateur ne prend pas en charge les primitives :
public interface IntComparator{
public int compare(int a, int b);
}
(Vous pourriez bien sûr le faire avec l'autoboxing / unboxing mais je ne m'aventurerai pas sur ce terrain, c'est moche).
Ensuite, voici une méthode d'aide pour trier un tableau d'int en utilisant ce comparateur :
public static void sort(final int[] data, final IntComparator comparator){
for(int i = 0; i < data.length + 0; i++){
for(int j = i; j > 0
&& comparator.compare(data[j - 1], data[j]) > 0; j--){
final int b = j - 1;
final int t = data[j];
data[j] = data[b];
data[b] = t;
}
}
}
Et voici un peu de code client. Un comparateur stupide qui trie tous les nombres qui ne sont constitués que du chiffre '9' au début (encore une fois triés par taille) et ensuite le reste (pour n'importe quelle raison) :
final int[] data =
{ 4343, 544, 433, 99, 44934343, 9999, 32, 999, 9, 292, 65 };
sort(data, new IntComparator(){
@Override
public int compare(final int a, final int b){
final boolean onlyNinesA = this.onlyNines(a);
final boolean onlyNinesB = this.onlyNines(b);
if(onlyNinesA && !onlyNinesB){
return -1;
}
if(onlyNinesB && !onlyNinesA){
return 1;
}
return Integer.valueOf(a).compareTo(Integer.valueOf(b));
}
private boolean onlyNines(final int candidate){
final String str = String.valueOf(candidate);
boolean nines = true;
for(int i = 0; i < str.length(); i++){
if(!(str.charAt(i) == '9')){
nines = false;
break;
}
}
return nines;
}
});
System.out.println(Arrays.toString(data));
Sortie :
[9, 99, 999, 9999, 32, 65, 292, 433, 544, 4343, 44934343]
Le code de tri a été repris de Arrays.sort(int[]) et je n'ai utilisé que la version optimisée pour les petits tableaux. Pour une implémentation réelle, vous voudrez probablement regarder le code source de la méthode interne sort1(int[], offset, length)
en el Tableaux classe.
0 votes
Voulez-vous simplement trier le tableau par ordre décroissant ou voulez-vous effectuer quelque chose de plus compliqué ?
1 votes
Quelque chose de plus compliqué. Je veux trier les int en utilisant la valeur absolue comme clé.