[英]Custom sort with insertion sort
我已經了解了插入代碼的基礎知識,但是我堅持將其與其他條件進行比較(按AZ,ZA列出)
例如,給出了一個職員級別列表:
public static final String[] staffrank = {
"Trainee",
"Junior",
"Senior",
"Administrator"
};
我有一個比較Rank的方法
如果返回0,則表示他們處於同等地位(員工1和員工2)
如果返回-1,則表示職員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;
輸出假定為:(按圖表從低到高的順序排列)
艾米,實習生戴夫,實習生安妮,少年加里,少年唐娜,高級湯姆,行政長官
任何幫助將不勝感激..謝謝
我認為,既然已經為您提供了一個staffrank
變量,那么您可能應該使用它。 但是,除了在您的問題的開頭提到它之外,您不會再使用我們已經展示過的它了……所以我的假設是您已經完全忽略了它。
我認為這是您困惑的關鍵。
請注意,我忽略了String數組不是最佳表示的事實(我將使用enum
或類之類的方法...可能在某處實現Comparable<StaffRank>
...但這是一個測試問題,如前所述, 畢竟...)
您可以創建如下函數:
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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.