自定义排序与插入排序

时间:2011-12-01 12:07:22

标签: java sorting

我已经掌握了插入代码的基础知识,但我仍然坚持如何将它与其他条件进行比较(按A-Z,Z-A列出)

例如,给出了员工队伍列表:

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

我有一个compareRank

的方法

如果它返回0意味着他们的排名相同(员工1和员工2)

如果它返回-1则表示员工1的级别低于员工2

如果它返回1则意味着员工1的级别高于员工2

然后我在void main

中有一份工作人员名单
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;

输出假定给出:(根据图表按照从低到高的顺序排列)

艾美,实习生 戴夫,实习生 安妮,少年 加里,少年 唐娜,高级 汤姆,管理员

任何帮助都会受到赞赏..谢谢你

2 个答案:

答案 0 :(得分:0)

我认为既然你已经获得了一个staffrank变量,你应该可以使用它。但是,除了在问题的顶部提及它之外,你没有使用它我们已经被展示过......所以我的假设是你完全忽略了它。

我认为这是你谜题的关键。

请注意,我忽略了字符串数组不是最佳表示的事实(我会选择enum或类似的东西......可能在某处实现Comparable<StaffRank> ...但这毕竟是一个测试问题......)

答案 1 :(得分: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和(rank.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
}