排序-归并排序-Java
来源:互联网 发布:马来西亚华人知乎 编辑:程序博客网 时间:2024/04/29 18:32
归并是利用二叉树的思想来实现
将一个数组分成2个,再次分,再次分。一直分,然后再利用递归来实现。1个和另一个组成一个,两个再与另外两个有序的组成一个大的。一直进行下去。
分为自顶向下和自底向上
向下:
package sorts;import object.Example;import object.Merge;public class Merge_toptobottom extends Example{ private static Comparable[] aux; public static void merge(Comparable[] a,int lo, int mid, int hi){ int i=lo,j=mid+1; for(int k=lo;k<=hi;k++){aux[k] = a[k];}//将a赋到aux中,再通过aux将数组赋值给a for(int k=lo;k<=hi;k++){ if (i>mid){a[k]=aux[j++];}//如果左边没了,那么右边直接放入 else if (j>hi) {a[k]=aux[i++];}//如果右边没了,那么左边直接放入。//因为本来就是将有序的数组合并~一边没了当然就可以放入另一边的了 else if (less(aux[j], aux[i])) {a[k]=aux[j++];}//i是lo向右,j是mid+向右也就是分别是两个数组的头。进行比较这个的是说如果aux[j]小于aux[i],那么就把数组aux[j]他小啊,将其放入a[k]中 else {a[k]=aux[i++];} //这个就是左边的数组的那个值小,将其放入 } } public static void sort(Comparable[] a,int lo,int hi){ if(hi<=lo) return; int mid = lo+(hi-lo)/2; sort(a, lo, mid);//左边的,然后递归 sort(a,mid+1,hi); merge(a, lo, mid, hi);//最后合并数组 } public static void main(String[] a){ Comparable[] ac = new Comparable[]{7,6,5,8,9,4,9,3,1,5,2,1,5,4}; aux = new Comparable[ac.length]; sort(ac, 0, ac.length-1); show(ac); }}
自底向上:
package sorts;import object.Example;public class Merge_bottomtotop extends Example{private static Comparable[] aux; public static void merge(Comparable[] a,int lo, int mid, int hi){ int i=lo,j=mid+1; for(int k=lo;k<=hi;k++){aux[k] = a[k];} for(int k=lo;k<=hi;k++){ if (i>mid){a[k]=aux[j++];} else if (j>hi) {a[k]=aux[i++];} else if (less(aux[j], aux[i])) {a[k]=aux[j++];} else {a[k]=aux[i++];} } } public static void sort(Comparable[] a){ int N = a.length; aux = new Comparable[N]; for(int sz =1;sz<N;sz=sz+sz){ for(int lo=0;lo<N-sz;lo+=sz+sz){ merge(a, lo, lo+sz-1, Math.min(lo+sz+sz-1, N-1)); } } } public static void main(String[] a){ Comparable[] ac= new Comparable[]{6,5,7,4,8,3,9,2,0,1,5}; sort(ac); show(ac); }}
参考:
http://blog.csdn.net/kwang0131/article/details/51074899
http://blog.csdn.net/jianyuerensheng/article/details/51262984
http://blog.csdn.net/linsheng9731/article/details/22928671
主要对merge的代码的解释,后面的主要是使用merge然后递归
merge是合并数组
比如上面的利用递归的,然后分成两个,最后merge合并
将合并的数组添加到aux中
阅读全文
0 0
- java排序--归并排序
- 排序-归并排序-Java
- Java排序算法 归并排序
- Java 排序之 归并排序
- java排序算法---归并排序
- 归并排序(Java) @排序
- Java排序算法:归并排序
- Java排序五:归并排序
- JAVA排序算法---归并排序
- 排序中的归并排序Java
- java排序之归并排序
- Java 快速排序 归并排序
- Java排序算法--归并排序
- Java 排序算法-归并排序
- Java排序之归并排序
- java排序之 --- 归并排序
- 归并排序Java实现
- java归并排序算法
- 正则表达式 入门
- ZCMU—1928
- 动态创建按钮
- opencv BRIEF(Binary Robust Independent Elementary Features)
- Java实现设计模式之单例模式
- 排序-归并排序-Java
- Oracle查询语句
- POJ2485 Kruscal
- *矩阵快速幂(斐波那契数列模板)
- GetMemory
- [BZOJ]3110: [Zjoi2013]K大数查询
- rabbitmq消息队列安装
- (C#)WPF保存图片,将图片提交到服务端进行保存
- 2017 计蒜之道初赛第三场 A.腾讯课堂的物理实验