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