这是我自己编写的合并排序的Java实现:
import java.util.*;
public class MergeSort {
public static void main(ArrayList<Integer> L){
ArrayList<Integer> inputArr= new ArrayList<Integer>();
inputArr.add(43);
inputArr.add(32);
inputArr.add(4);
inputArr.add(523);
inputArr.add(67);
inputArr.add(45);
inputArr.add(66);
MergeSort mms=new MergeSort();
ArrayList<Integer> outputArr= new ArrayList<Integer>();
outputArr=mms.sorting(inputArr);
for (int i=0; i<outputArr.size(); i++){
System.out.print(outputArr.get(i));
System.out.print(" ");
}
}
public ArrayList<Integer> sorting(ArrayList<Integer> L){
int NumEelement = L.size()/2 + L.size()%2;
ArrayList<Integer> A = new ArrayList<Integer>();
ArrayList<Integer> B = new ArrayList<Integer>();
A = (ArrayList<Integer>) L.subList(0, NumEelement);
B = (ArrayList<Integer>) L.subList(NumEelement+1, L.size()-1);
sorting(A);
sorting(B);
ArrayList<Integer> result=merge(A,B);
return result;
}
public ArrayList merge(List<Integer> A, List<Integer> B){
int i=0;
int j=0;
ArrayList<Integer> newL = new ArrayList<Integer> ();
for(int k=0;k<(A.size()+ B.size());k++){
if (A.get(i)< B.get(j)){
newL.set(k, A.get(i));
i++;
}else{
newL.set(k, B.get(j));
j++;
}
}
return newL;
}
}
此代码符合。但是,有两个注意事项:1。MergeSort.java使用未经检查或不安全的操作。 2.使用-Xlint重新编译:取消选中以获取详细信息。
答案 0 :(得分:1)
正确使用您的通用用法.. 改变
public ArrayList merge(List<Integer> A, List<Integer> B){
到
public ArrayList<Integer> merge(List<Integer> A, List<Integer> B){