主要思想是先对序列进行分割,然后再进行归并排序。
如一个数组[1,2,3,4,5,6]
第一次分割为[1,2,3],[4,5,6]
第二次分割为[1,2],[3],[4,5],[6]
第三次分割为[1],[2],[3],[4],[5,[6]
第一次归并排序为[1],[2];[4],[5]
.
.
.
以此类推
public class MergeSort {
private double[] bridge;
public MergeSort(double [] sorted){
if(sorted.length==0){
throw new NullPointerException("size is null");
}
int sorted_length=sorted.length;
bridge=new double[sorted_length];
}
public void mergeso(double [] obj,int left,int right){
while(left<right){
int center=(left+right)/2;
mergeso(obj,left,center);
mergeso(obj,center+1,right);
merge(obj,left,center,right);
}
}
public void merge(double [] obj,int left,int center,int right){
int mid=center+1;
int tem1=left;
int tem2=left;
while(left<=center && mid<=right){
if(obj[left]<obj[mid]){
bridge[tem1++]=obj[left++];
}
else{
bridge[tem1++]=obj[mid++];
}
}
while(left<=center){
bridge[tem1++]=obj[left++];
}
while(mid<=center){
bridge[tem1++]=obj[mid++];
}
copy(obj,tem2,right);
}
public void copy(double [] obj,int left,int right){
while(left<=right){
obj[left]=bridge[left];
left++;
}
}
}