归并排序java实现
2017-04-11 10:10
337 查看
归并排序 :
中文理解就是合并的意思,.也就是号将两个分开的部分,合并成为一个整体,可是,如何实现所谓合并呢?
Merging Sort: Merge :
其实更好的体现了算法的思想,将部分——>merge——>成为整体,Merge,像和面一样,很充分的结合。
原理(先分后和):
step1:将一个无序的序列分开为n个有序的长为1的子序列
step2:n个中两两配对按顺序合并,得到n/2个有序子序列
step3:n/2个里再继续两两按顺序合并,得到n/4个有序子序列
...
step end:最后2个按顺序合并,成为一个n长的有序序列
下面代码为将序列进行分开并合并:
下面代码为将两个序列进行Merge:
测试用例:
输入:{50,10,80,90,40,20,30,60,70,110,100}
输出:{10 20 30 40 50 60 70 80 90 100 110}
中文理解就是合并的意思,.也就是号将两个分开的部分,合并成为一个整体,可是,如何实现所谓合并呢?
Merging Sort: Merge :
其实更好的体现了算法的思想,将部分——>merge——>成为整体,Merge,像和面一样,很充分的结合。
原理(先分后和):
step1:将一个无序的序列分开为n个有序的长为1的子序列
step2:n个中两两配对按顺序合并,得到n/2个有序子序列
step3:n/2个里再继续两两按顺序合并,得到n/4个有序子序列
...
step end:最后2个按顺序合并,成为一个n长的有序序列
下面代码为将序列进行分开并合并:
public void Msort1(int[] SR, int[] TR, int s, int t) { int m; int[] TR1 = new int[MAXSIZE]; if(s==t) TR[s] =SR[s]; else { m=(s + t)/2; Msort1(SR, TR1, s, m);//先分段 Msort1(SR, TR1 ,m+1, t); Merge(TR1, TR, s, m, t);//再将分段后的进行合并排序 } }
下面代码为将两个序列进行Merge:
private 4000 void Merge(int[] S, int[] Result, int start, int mid, int end) { int j,k,l; //先将S[]数组分段,左边的S[Start]和右边的S[j]按顺序进行比较 //比较后,将较小的以此放入新的数组result[K]中 for(j = mid+1,k = start; s <= mid && j <= end; k++) { if(S[start] < S[j]) { Result[k] = S[start++]; }else { Result[k] = S[j++]; } } //最后两段比较后,若只剩下左边的一部分,则直接按顺序写入result[]的后面 if(s <= mid) { for(l=0; l != mid-start; l++) Result[k+l] = S[start+l]; } } //同理,最后若只剩下左边的一部分,则直接按顺序写入result[]的后面 if(j <= end) { for(l=0; l != end-j; l++) { Result[k+l] = S[j+l]; } } }
测试用例:
输入:{50,10,80,90,40,20,30,60,70,110,100}
输出:{10 20 30 40 50 60 70 80 90 100 110}
相关文章推荐
- java 快速排序算法--归并排序的实现
- java实现归并排序
- [排序算法]--归并排序的Java实现
- java实现通过归并排序计算数组逆数对个数
- 算法入门---java语言实现的归并排序小结
- 基于海量数据的外部排序java实现(快速+归并)
- 归并排序 & 数组中的逆序对 【java实现】
- 二路归并排序的java实现
- Java归并排序的实现
- 归并排序及java实现
- 程序员必知的8大排序(java实现)(三)(冒泡+快速+归并)
- 归并排序的java实现
- 二路归并排序的Java实现
- 归并排序原理及Java实现
- 【算法】归并排序的java实现
- java实现归并排序,树形排序(锦标赛制);java字符串分隔或的形式
- 气泡,归并,插入,快速,选择排序java实现
- 归并排序的java实现
- 【排序算法】归并排序原理及Java实现
- java实现排序算法之归并排序(2路归并)