2011-12-01 5 views
1

j'ai obtenu les bases du code d'insertion mais je suis coincé sur la façon de le comparer avec une autre condition autre que (liste par AZ, ZA)Tri personnalisé avec tri par insertion

pour l'exemple une liste du personnel rangs ont été donnés:

public static final String[] staffrank = { 
     "Trainee", 
     "Junior", 
     "Senior", 
     "Administrator" 
    }; 

J'ai une méthode pour compareRank

Si elle retourne 0 signifie qu'ils sont de rang égal (personnel 1 et 2 du personnel)

si elle renvoie -1 signifie staf f 1 est de rang inférieur personnel 2

si elle retourne 1 signifie que le personnel 1 est un rang plus élevé que le personnel 2

J'ai une liste des états-majors dans le principal

Staff[] snames; 
    int countname=0; 
    snames = new Staff[50]; 
    snames[countname++] = new Staff("Amy","Trainee"); 
    snames[countname++] = new Staff("Annie","Junior"); 
    snames[countname++] = new Staff("Tom","Administrator"); 
    snames[countname++] = new Staff("Dave","Trainee"); 
    snames[countname++] = new Staff("Gary","Junior"); 
    snames[countname++] = new Staff("Donna","Senior"); 

vide alors le type d'insertion comparer le code

public static void insertionSortbyRank(Staff[] snames, int countname) { 


//insertion sort 
for(int i =1; i < countname; i++) { 
int j = i; 
int comparerank = Staff.compareRank(snames[j],snames[j-1]); 

String name = snames.getName(); 
String rank = snames.getRank(); 

//if staff is lower rank 
if(comparerank==-1) { 

alors je ne suis pas sûr de quoi mettre dans cette boucle while me donner encore une liste non triée

while(j >0 && rank.compareRank(list[j], list[j - 1]) == 1))) { 
    list[j].rank =[j-1].rank; 
    list.[j].name = [j-1].name; 

    j--; 
} 

puis la fin est de remplacer les nouvelles valeurs

snames[j].name = name; 
snames[j].rank = rank; 

la sortie suppose de donner: (par ordre de leurs rangs de bas au plus élevé selon le tableau)

Amy, Stagiaire Dave, Stagiaire Annie, junior Gary, junior Donna, senior Tom, administrateur

Toute aide serait appréciée .. merci

+0

c'est un devoir? – soulcheck

+0

Il est étiqueté "devoirs" donc je suppose qu'il est .. :) –

+0

c'était l'une de mes questions d'examen .. mais nous ne saurons pas la réponse car c'était la finale. Je n'ai même pas tagué mes devoirs ... c'était le gars qui a "édité" mon article –

Répondre

0

Je suppose que puisque vous avez reçu une variable staffrank, que vous devriez probablement en faire usage. Cependant, mis à part le fait de le mentionner en haut de votre question, vous n'en faites aucun autre usage qu'on nous a montré ... Donc, mon hypothèse est que vous l'avez complètement ignorée.

Je pense que c'est la clé de votre puzzle ici. Notez que j'ignore le fait que les tableaux de chaînes ne sont pas la meilleure représentation (j'irais pour un enum ou quelque chose comme une classe ... Potentiellement l'implémentation de Comparable<StaffRank> quelque part ... Mais c'est une question de test comme a noté, après tout ...)

+0

malheureusement, nous n'avions pas le droit d'ajouter de classe. nous ne pouvons utiliser que la classe qui nous a déjà été fournie. Tout ce que nous avions était une liste de l'ordre de tri "personnalisé", et la liste des éléments à trier, avec ces méthodes vides pour nous remplir nous-mêmes. –

+0

Je comprends cela. C'est pourquoi j'ai commencé par pointer le tableau de String 'staffrank', et formulé les notes sur l'utilisation d'un' enum' ou d'une classe Comparable après coup. – Mike

0

vous pouvez faire une fonction comme ceci:

public static final int compareRank(String[] ranks, String rank) { 
    for (int i=0; i<ranks.length; i++) { 
     String string = ranks[i]; 
     if string.equals(rank) return i; 
    } 
    return -1; 
} 

qui renvoie un nombre entier compris entre -1 et (ranks.length -1) que vous pouvez utiliser pour la comparaison. Plus le nombre est petit, plus le rang est élevé.

À l'intérieur de votre boucle while, vous devrez comparer chaque équipe et les échanger si le personnel «i» est supérieur au personnel «i + 1».

for (int i=0; i<(snames.length-1); i++) { 
    Staff sname1 = sname[i]; 
    Staff sname2 = sname[i+1] 
    //compare sname1 to sname2 and swap if sname1 > sname2 
}