2011-12-01 3 views
1

я получил основы вставки кода, но я застрял на том, чтобы сравнить его с другим условием другой тогда (поиск по AZ, ZA)Пользовательская сортировка со вставкой рода

для примера список сотрудников ряды были даны:

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

у меня есть метод для compareRank

Если она возвращает 0 означает, что они равного ранга (сотрудники 1 и сотрудники 2)

, если она возвращает -1 означает СТАФ е 1 ниже ранг, чем персонал 2

если она возвращает 1 означает, что персонал-выше ранг, чем персонал 2

Тогда у меня есть список сотрудников в ничтожном основной

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"); 

затем вставки рода сравнить код

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) { 

Тогда я не уверен, что положить в это время цикла еще дает мне несортированный список

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

    j--; 
} 

тогда конец заменяет новые значения

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

выход предполагает, чтобы дать: (по заказу своих рядов от низкого до самого высокого в соответствии с таблицей)

Эй, стажер Дэйв, стажер Энни, младший Гэри, младший Донна, старший Том, администратор

Любая помощь была бы оценена .. спасибо

+0

Это домашнее задание? – soulcheck

+0

Это помечено как «домашнее задание», поэтому я предполагаю, что это .. :) –

+0

Это был один из моих экзаменационных вопросов .. , но мы не будем знать ответа, так как это был финал. Я даже не поместил домашнюю работу ... это был парень, который «отредактировал» мой пост –

ответ

0

Я бы предположил, что, поскольку вам была предоставлена ​​переменная staffrank, вы должны, вероятно, использовать ее. Однако, не упоминая его в начале вашего вопроса, вы не делаете другого использования этого, что нам показали ... Поэтому я полагаю, что вы полностью проигнорировали его.

Я думаю, что это ключ к вашей головоломке здесь.

Обратите внимание, что я игнорирую тот факт, что массивы String не являются лучшим представлением (я бы пошел на enum или что-то вроде класса ... Потенциально реализуя Comparable<StaffRank> где-то ... Но это тестовый вопрос, как отметил, что в конце концов ...)

+0

К сожалению, нам не разрешили добавлять какие-либо наши собственные классы. мы можем использовать только тот класс, который уже предоставлен нам. Все, что у нас было, это список «пользовательских» порядка сортировки и список элементов для сортировки, а также те пустые методы, чтобы заполнить себя. –

+0

Я понимаю это. Вот почему я начал, указав массив String 'staffrank', и составил примечания об использовании класса enum или класса Comparable в качестве запоздалой мысли. – Mike

0

вы могли бы сделать функцию как это:

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; 
} 

который будет возвращать целое число от -1 и (ranks.length -1), который можно использовать для сравнения. Чем меньше число, тем более младший ранг.

Внутри цикла while вам нужно будет сравнить каждый персонал и поменять его, если «i» -й штат больше, чем «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 
} 
Смежные вопросы