您的位置:首页 > 编程语言 > Java开发

改进归并排序消除递归Java实现

2015-05-08 23:12 357 查看
思想很简单,我就不说了,下面是代码实现,一定要注意细节:

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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: