簡體   English   中英

自定義排序與插入排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM