面向对象排序的两种实现.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
面向对象排序的两种实现

本实验采用两套方案来实现排序包 首先这两个程序包都要用到辅助包pator,在这内面主要定义了一个比较器接口 public interface MyCompator { int compare(Object o1,Object o2); } 用来比较两个对象之间的先后关系(0:o1在o2前面;0:o1在o2后面;==0:部分先后)。考虑到要比较Primitive数据类型的数组,所以在该包中包含了8个实现类,其中包括对于Ingeger,Long,Float,Character,Byte,Short,Double,String这8个对象所对应的比较器,当然对于String类的比较器主要是为了实现字典排序。 1)第一套方案:继承实现(UML图在同级目录下,文件名为:方案一UML图(继承实现)) 在该程序包中有一个父类Sorter,下面还有三个子类:BubbleSorter,QuickSorter InsertSorter,下面是这三个类的Outline 在Sorter类中有一个抽象方法protected abstract void sort(boolean isAscend,Object[] array);所以三个子类必须实现该方法。而每一个子类在实现该方法时可以自己的算法。这样父类中对Primitive数据类型的数组进行排序时采用的父类的抽象方法sort,而把具体的算法实现留给子类,但是在父类中排序的结果是一样的。 还有一点要指出的是,在父类中有两个构造方法,一个是带参数的,一个是不带参数的。不带参数的只要是用来对Primitive数据类型的数组进行排序的,但是程序内部实际上是用的Primitive数据类型所对应的对象类型来进行排序的,而且在排序时是用的是程序包pator中的Primitive数据类型所对应的对象类型的比较器。(举个例子,在父类Sorter中如果要对int[]进行排序,那么首先是把int[]转化为Integer[],然后再条用setCompator(new IntCompator()))方法将Integer的比较器设置进去,这样就实现了Primitive数据类型和对象类型公用一套算法的目的),具体代码如下: protected void sortIntArray(int[] array,boolean isAscend) { Integer[] integers = new Integer[array.length]; for(int i = 0;iarray.length;i++) integers[i]=array[i]; this.setCompator(new IntCompator()); this.sort(isAscend, integers); for(int j = 0;jintegers.length;j++) array[j]=integers[j]; } 带参数的主要是对对象数组进行排序的,用户可以实现自己定义的比较器来对对象数组进行排序。当然如果用户开始时只想对Primitive数据类型进行排序,然后可以调用setCompator方法对对象数组进行排序。 2)第二套方案:枚举实现(UML图在同级目录下,文件名为:方案二UML图(枚举实现)) 在该程序包中,所有的排序算法都在PrimitiveSorter中,但是对外只提供sort方法,这样就可以把具体的算法封装起来了。而要选择具体的算法时可以通过传进参数来选择,这里主要用到一个枚举SortAlgorithm,public enum SortAlgorithm { BUBBLE,QUICK,INSERT, } 在本实验中值实现了三种排序算法,所以该枚举中只有三个枚举成员。如果要添加排序算法的话,只要在枚举Algorithm中添加相应的类别,然后再sort方法中添加相应的分支就可以完成了,完全不用动其他的实现,这样做到了排序算法的相对独立。 而完成主要的排序功能的类主要是Sorter类,下面是其outline 这里面对Primitive数据类型数组进行排序的原理与上面的程序包的原理是一样的。对对象数组排序的方法如下 /** * 按用户自定义的比较器来排序对象数组,该算法是用快速排序按照升序排序实现的 * @param array 待排序对象数组 * @param c 自定义的比较器(用户需要实现MyCompator接口) */ public static void sortObjectArray(Object[] array,MyCompator c) { new TypeSorter().sortArray(array, true,SortAlgorithm.QUICK,c

文档评论(0)

zhanghc + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档