public static void mergeSort(int[] array){
//前一个有序组合
ArrayList<Integer> list01=new ArrayList<>();
//后一个有序组合
ArrayList<Integer> list02=new ArrayList<>();
//两个有序组合合并的结果
ArrayList<Integer> list03=new ArrayList<>();
for(int gap=1;gap<array.length;gap=gap*2){
for(int i=0;i<array.length;i++){
if(list01.size()<gap){
list01.add(array[i]);
}else
if(list02.size()<gap){
list02.add(array[i]);
}
if( (list01.size()==gap && list02.size()==gap) || (list01.size()==gap && list02.size()<gap && i==array.length-1) ){
//排序
switchArray(list01,list02,list03);
list01.clear();
list02.clear();
}
}
for(int j=0;j<list03.size();j++){
array[j]=list03.get(j);
}
list01.clear();
list02.clear();
list03.clear();
System.out.println(Arrays.toString(array));
}
}
public static void switchArray(ArrayList<Integer> list1,ArrayList<Integer> list2,ArrayList<Integer> list3){
//System.out.println("list1");
int m=0;
int n=0;
while(m<list1.size() && n<list2.size()){
while(m<list1.size() && n<list2.size() && list1.get(m) < list2.get(n)){
//System.out.println("m==="+m);
list3.add(list1.get(m));
m++;
}
while(n<list2.size() && m<list1.size() && list1.get(m) >= list2.get(n)){
//System.out.println("n==="+n);
list3.add(list2.get(n));
n++;
}
}
while(m<list1.size()){
list3.add(list1.get(m));
m++;
}
while(n<list2.size()){
list3.add(list2.get(n));
n++;
}
}