Java实现归并排序
来源:互联网 发布:程序员面试宝典 编辑:程序博客网 时间:2024/05/18 01:50
归并排序用到的方法就是分治法(divided-conquer-combined)
思想就是:将数组分成两个数组,如果两个数组的元素都是有序的,那么就可以很方便的将这两组数据归并。如果没有序继续将两组数组分组,以此类推,当组内只有一个数据时,认为这个小组内已经有序,然后合并相邻两个小组就可以。
Java代码如下
package sort;//归并排序//2015-05-31public class MergeSort {//归并排序用的是分治法,divided——conquer——combined public void mergesort(int a[],int first,int last,int temp[]){ if(first==last){ temp[first]=a[first]; } else {int mid=(first+last)/2; //递归 //对左边进行排序 mergesort(a,first,mid,temp); //对右边进行排序 mergesort(a,mid+1,last,temp); //进行归并 mergearray(a,first,mid,last,temp); } } public void mergearray(int a[],int first,int mid,int last,int temp[]){ int i=first; int j=mid+1; int m=mid; int n=last; int k=0; while(i<=m&&j<=last){ if(a[i]<a[j]){ temp[k++]=a[i++]; } else { temp[k++]=a[j++]; } } while(i<=m){ temp[k++]=a[i++]; } while(j<=n){ temp[k++]=a[j++]; } for(i=0;i<k;i++){ a[i+first]=temp[i]; } } }
这里遇到的问题有两个
case1:递归导致内存溢出
if(first==last){ temp[first]=a[first]; } else {int mid=(first+last)/2; //递归
当时没有对first和last进行比较,结果导致内存溢出
case2: 数组初始化是没有给定
int[] temp = new int[a.length ] ;
该过即可正常编译通过
0 0
- 归并排序Java实现
- Java实现归并排序
- Java实现归并排序
- 归并排序Java实现
- 归并排序JAVA实现
- java实现归并排序
- 归并排序(java实现)
- 归并排序java实现
- Java实现归并排序
- 归并排序 java实现
- 归并排序Java实现
- 归并排序java实现
- Java实现归并排序
- Java实现归并排序
- Java实现归并排序
- JAVA实现归并排序
- java实现归并排序
- 归并排序 Java实现
- 贪吃蛇之二维数组实现
- 8.17建立一个类模板实现求3个数之和
- ZigBee中协调器如何向子节点发消息?
- Codeforces #180 div2 C Parity Game
- hdu2082找单词——母函数
- Java实现归并排序
- 2015年第十三周oj:找出N之内的所有完数
- 最大匹配、最小顶点覆盖、最大独立集、最小路径覆盖(转)
- HUD2188 悼念512汶川大地震遇难同胞——选拔志愿者(巴什博奕)
- Android底层开发(二)之linux内核层 第一步
- Core Animation 官方文档第四章(建立图层的层次结构)
- [leetcode] Contains Duplicate III
- Cedit 移动滚动条时,文字出现重叠处理
- 海马汽车经销商管理系统技术解析(十)预约配件资源释放