思想很简单,我就不说了,下面是代码实现,一定要注意细节:
package data_structure;
public class MergeSortChange {
private int array[];
public MergeSortChange(){
array=new int[]{3,7,4,2,10,8,5,4,8};
}
public MergeSortChange(int []a){
array=new int[a.length];
for(int i=0;i<a.length;i++){
array[i]=a[i];
}
}
public void mergeSort(){
int n=array.length;
int i=1,j=0;
for(i=1;i<n;i=i*2){
for(j=0;j<=n-1;j=j+2*i){
if(j+i-1<n-1){
if(j+2*i-1<=n-1){
merge(j, j+i, j+2*i-1);
}
else if(j+2*i-1>n-1){
merge(j, j+i, n-1);
}
}
}
for(int q:array)
System.out.print(q+" ");
System.out.print(" i="+i+"\n");
}
}
public void print(){
for(int i=0;i<array.length;i++){
System.out.print(array[i]+" ");
}
}
public void merge(int a,int b,int c){
int temp[]=new int[c-a+1];
int i=a,j=b,q=0;
while(i<=b-1 || j<=c){
if(i<=b-1 && j<=c){
temp[q]=Math.min(array[i], array[j]);
if(array[i]<array[j])
i++;
else
j++;
}
else if(i>b-1 && j<=c){
temp[q]=array[j++];
}
else if(i<=b-1 && j>c){
temp[q]=array[i++];
}
q++;
}
for(int x:temp)
array[a++]=x;
}
public static void main(String[] args) {
int a[]={5,6,2,1,4,8,9,10,12,10,3};
for(int x:a)
System.out.print(x+" ");
System.out.println();
MergeSortChange change=new MergeSortChange(a);
change.mergeSort();
change.print();
}
}