博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2_7 递归与分治策略(合并排序)
阅读量:6095 次
发布时间:2019-06-20

本文共 1514 字,大约阅读时间需要 5 分钟。

合并排序有在大二的《数据结构》课中出现过。

上面这个人的博客讲的非常的好,如果有打算看博客的可以经常关注。

将他的简化得到如下:

(图片引自上述博客)

简言之,就是利用分治的思想将数组划分为(n/log n)段(log n为划分层次),然后合并多个有序数组。

上代码:

  

1 public class a_2_7 
{ 2 /* 3 * 对数组进行划分 4 * */ 5 public static
void divide(T a[],int left,int right){ 6 /* 2、如果数组无法划分了就直接返回*/ 7 if(a==null||left>=right) return ; 8 9 /* 1、对数组进行划分,依据mid进行划分*/10 int mid=(left+right)/2;11 divide(a,left,mid);12 divide(a,mid+1,right);13 14 /* 3、对数组进行合并*/15 merge(a,left,mid,right);16 /* 8、合并完成*/17 }18 19 public static
void merge(T [] a, int left, int mid, int right) {20 21 /* 4、新建临时存储区*/22 Object []temp=new Object[right-left+1];23 int i=left,j=mid+1,k=0;24 25 /* 5、将当前分段的左右两边进行合并*/26 while(i<=mid&&j<=right){27 if(a[i].compareTo(a[j])<=0)temp[k++]=a[i++];28 else temp[k++]=a[j++];29 }30 31 /* 6、合并剩余未合并完成的段*/32 while(i<=mid)temp[k++]=a[i++];33 while(j<=right)temp[k++]=a[j++];34 35 /* 7、将临时存储区的内容复制到原始数组中*/36 k=0;37 for(Object o : temp){38 a[k+left]=(T)temp[k];39 k++;40 }41 }42 public static void main(String []args){43 Integer []a=new Integer[100];44 for(int i=0;i

运行结果如下:

上述代码注释基本描述清楚了内容。

在写这几次的代码过程中,发现了一个问题,自己的Java内容忘得差不多了,而且泛型接触的很少,后面再做Java泛型的博客。

转载于:https://www.cnblogs.com/woyaodangxueba/p/10453902.html

你可能感兴趣的文章
记一次eclipse无法启动的排查过程
查看>>
【转】jmeter 进行java request测试
查看>>
读书笔记--MapReduce 适用场景 及 常见应用
查看>>
SignalR在Xamarin Android中的使用
查看>>
走过电竞之路的程序员
查看>>
Eclipse和MyEclipse使用技巧--Eclipse中使用Git-让版本管理更简单
查看>>
[转]响应式表格jQuery插件 – Responsive tables
查看>>
8个3D视觉效果的HTML5动画欣赏
查看>>
C#如何在DataGridViewCell中自定义脚本编辑器
查看>>
【linux】crontab定时命令
查看>>
Android UI优化——include、merge 、ViewStub
查看>>
Office WORD如何取消开始工作右侧栏
查看>>
Android Jni调用浅述
查看>>
CodeCombat森林关卡Python代码
查看>>
第一个应用程序HelloWorld
查看>>
(二)Spring Boot 起步入门(翻译自Spring Boot官方教程文档)1.5.9.RELEASE
查看>>
Android Annotation扫盲笔记
查看>>
React 整洁代码最佳实践
查看>>
聊聊架构设计做些什么来谈如何成为架构师
查看>>
Java并发编程73道面试题及答案
查看>>