Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带有插入排序的自定义排序_Java_Sorting - Fatal编程技术网

Java 带有插入排序的自定义排序

Java 带有插入排序的自定义排序,java,sorting,Java,Sorting,我已经掌握了插入代码的基本知识,但我一直在研究如何将其与其他条件进行比较(按A-Z,Z-A列出) 例如,给出了员工职级列表: public static final String[] staffrank = { "Trainee", "Junior", "Senior", "Administrator" }; 我有一个比较的方法 如果返回0,则表示他们的级别相等(职员1和职员2) 如果返回-1,则表示职员1的级别低于职员2

我已经掌握了插入代码的基本知识,但我一直在研究如何将其与其他条件进行比较(按A-Z,Z-A列出)

例如,给出了员工职级列表:

public static final String[] staffrank = {
        "Trainee",
        "Junior",
        "Senior",
        "Administrator"
    };
我有一个比较的方法

如果返回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) {
最后是替换新值

snames[j].name = name;
snames[j].rank = rank;
假设的输出:(根据图表,按从低到高的顺序排列)

艾米,实习生 戴夫,实习生 小安妮 小加里 老唐娜 汤姆,管理员


任何帮助都将不胜感激。谢谢你

我认为既然给了你一个
staffrank
变量,你可能应该使用它。然而,除了在你问题的顶部提到它之外,你没有利用它,我们已经看到了……所以我的假设是你完全忽略了它

我想这是你的谜题的关键


请注意,我忽略了一个事实,即字符串数组不是最好的表示形式(我会选择
enum
或类似于类的东西…可能在某个地方实现
Comparable
,但这毕竟是一个测试问题…

您可以创建这样的函数:

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;
}
public静态final int compareRank(字符串[]秩,字符串秩){

因为(int i=0;iIt标记为“家庭作业”,所以我想它是……)这是我的一个考试题……但我们不知道答案,因为是期末考试。我甚至没有标记家庭作业……是那个“编辑”我的帖子的家伙。遗憾的是,我们不允许添加任何自己的类。我们只能使用已经提供给我们的类。我们所拥有的只是一张列表“自定义”排序顺序和要排序的项目列表,以及那些用来填充我们自己的空方法。我理解这一点。这就是为什么我首先指出
staffrank
String数组,然后详细说明如何使用
enum
或类似类作为事后考虑。
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;
}
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
}