改进归并排序消除递归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(); } }
相关文章推荐
- 两种归并排序算法的实现:二路归并排序和基本归并排序(虚拟消除递归的二路归并排序)
- C语言实现快排、归并排序、快排改进算法的递归和非递归算法
- 归并排序 C++/Java 递归实现代码 -犯了菜鸟老毛病
- Shell、归并排序、递归的java实现
- Java递归实现全排列改进(一)---利用HashSet实现去重
- Java递归实现全排列改进(二)---利用ArrayList实现去重
- 递归和迭代两种方式实现归并排序(Java版)
- 归并排序的递归与非递归实现java
- 归并排序的递归与非递归实现理解(Java)
- java实现消除文法的左递归
- [Java实现]Filbonacci斐波那契数列递归带来的问题和改进
- 归并排序(Merge Sort)递归、非递归 Java实现
- 归并排序非递归实现Java
- [java]冒泡排序的常规、改进以及递归实现
- 递归思想详解以及归并排序(java实现)
- 归并排序 Java实现(递归试)
- 归并排序(递归实现)
- 归并排序 递归实现
- Java基础------递归(Java实现)
- java实现汉诺塔(递归和非递归)