Java中的多重排序算法(在排序字段中排序)
ArrayList数据示例: BJM 300 AC4507 TOM_JONES,BDM 290 DC4058 ALAN_FIELD,ADG 350 BA3240 JON_THORN
我需要将上面的ArrayList按第三列第二列第三列第二列的升序排序
public static ArrayList sortLoad1(ArrayList<WorkLoad> loads){
String s1, s2;
WorkLoad temp; //Some local variables
for(int i = 0 ; i < loads.size(); i++){ //Loop forward
for(int j = loads.size()-1; j>i ;j--){ //Loop backward
s1 = loads.get(j-1).getDeptCode(); //Extract 1st
s2 = loads.get(j).getDeptCode(); //Extract 2nd
if(i+1<loads.size()&&s1.compareTo(s2)>-1){ //Compare them lexicographically
temp = loads.get(j-1);
//If s1 follows s2 then switch both
loads.set(j-1, loads.get(j));
loads.set(j, temp);
}//endif
}//end loop 2
}//end loop 1
return loads;
}
以上是我在ATM机上的代码。这会对第一列(BJM、BDM和ADG列)进行排序,但是我需要做什么才能在我上面提到的排序数据中进行排序呢??我想了三次分类,但这行不通,是吗
我尝试过下面提到的嵌套排序(见下文),但没有乐趣:
public static ArrayList sortLoad1(ArrayList<TeachingLoad> loads){
String s1, s2;
TeachingLoad temp; //Some local variables
for(int i = 0 ; i < loads.size(); i++){ //Loop throuth
for(int j = loads.size()-1; j>i ;j--){ //Loop through
s1 = loads.get(j-1).getLecturerID(); //Extract 1st
s2 = loads.get(j).getLecturerID(); //Extract 2nd
if(i+1<loads.size()&&s1.compareTo(s2)>-1){ //Compare them lexicographically
temp = loads.get(j-1);
//If s1 follows s2 then switch both
loads.set(j-1, loads.get(j));
loads.set(j, temp);
}
else{
for(int k = 0 ; k < loads.size(); k++){
for(int l = loads.size()-1; l>i ;l--){
s1 = loads.get(l-1).getDepartmentNumber();
s2 = loads.get(l).getDepartmentNumber();
if(k+1<loads.size()&&s1.compareTo(s2)>-1){
temp = loads.get(l-1);
loads.set(l-1, loads.get(l));
loads.set(l, temp);
}
else{
for(int m = 0 ; m < loads.size(); m++){
for(int n = loads.size()-1; n>i ;n--){
s1 = loads.get(n-1).getSchoolCode();
s2 = loads.get(n).getSchoolCode();
if(m+1<loads.size()&&s1.compareTo(s2)>-1){
temp = loads.get(n-1);
loads.set(n-1, loads.get(n));
loads.set(n, temp);
}
}
}
}
}
}
}
}//end loop 2
}//end loop 1
return loads;
}
# 1 楼答案
你需要把这些种类都套起来
基本上做第一个比较。如果结果不是0,则使用该结果
如果结果为0,则进行下一次比较。同样,如果结果不是0,则使用它
您可以根据需要继续此过程进行任意多个嵌套比较
不过,实现它最简单的方法是作为一个定制的比较器。然后你只需要做
Collections.sort(list, comparitor)
,它就会使用一个合适的算法对列表进行高效快速的排序例如,如果您有:
这将首先按a、b、c对X列表进行排序
要使用它,请执行以下操作: