2011-12-01 174 views
1

我已經得到的插入代碼的基礎知識,但我停留在如何將它與例如工作人員名單等,然後另一個條件(名單由AZ,ZA)自定義排序與插入排序

比較分別給予行列:

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

我不得不compareRank

的方法如果返回0意味着他們是同等級別的(工作人員1和2的工作人員)

如果返回-1表示STAF f 1的比人員2

較低秩如果它返回1表示員工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循環 仍然給我一個無序列表

(根據圖表從低他們的行列的順序最高)

艾米,生 :

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變量,你應該可以使用它。但是,除了在問題的頂部提及它之外,您別無它用,因爲我們已經展示過......所以我的假設是您完全忽略了它。

我認爲這是你在這裏拼圖的關鍵。

請注意,我忽略的事實是字符串數組是不是最好的代表(我會去的enum或類似的東西類...潛在實施Comparable<StaffRank>地方......但是,這是一個測試問題作爲注意,畢竟...)

+0

的傢伙,可惜我們沒有被允許添加我們自己的任何類別。我們只能使用已經提供給我們的課程。 我們所有的都是「自定義」排序順序列表,以及要排序的項目列表,以及那些填滿自己的空方法。 –

+0

我明白這一點。這就是爲什麼我首先指出'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 + 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 
}