定义一个ISort接口,方法有升序(sortAsc),有降序(sortDesc),传入参数是一个实现Comparable接口的对象数组,即不仅仅只对数字排序,还定义了两个默认方法:

compare方法比较两个数的大小,前者大返回1,后者大返回-1,相等返回0,这能减少后续同时实现升序(sortAsc),降序(sortDesc)的冗余代码。

swap方法交换数组里的两个元素值,比较常用。

package com.bsc.algorithm.sort.inf;

public interface ISort<T extends Comparable<T>> {

    /**
* 升序
* @param data
*/
void sortAsc(T[] data); /**
* 降序
* @param data
*/
void sortDesc(T[] data); /**
* 比较a,b两个值,a大返回1,b大返回-1,相等返回0
*
* @param a
* @param b
* @return a > b ? 1 : (a < b) ? -1 :0
*/
default int compare(T a, T b) {
int r = a.compareTo(b);
return r > 0 ? 1 : (r < 0 ? -1 : 0);
} /**
* 交换数组data第i和第j个元素
*
* @param data
* @param i
* @param j
*/
default void swap(T[] data, int i, int j) {
T temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}

定义一个AbstractSort抽象类,实现ISort接口,实现sortAsc和sortDesc方法,它们都是调用抽象sort(T[] data,int cr)方法,只是cr参数不一样

cr参数是通过调用ISort接口的默认方法compare比较两个值的返回结果

package com.bsc.algorithm.sort.inf;

public abstract class AbstractSort<T extends Comparable<T>> implements ISort<T> {

    @Override
public void sortAsc(T[] data) {
sort(data,1);
} @Override
public void sortDesc(T[] data) {
sort(data,-1);
} protected abstract void sort(T[] data,int cr);
}

在定义了上面的接口与抽象类之后,后面的每一个排序算法,只需要继承AbstractSort类,实现sort(T[] data,int cr)方法即可。

最新文章

  1. ERROR 1018 (HY000): Can&#39;t read dir of &#39;./test/&#39; (errno: 13)
  2. 为重负网络优化 Nginx 和 Node.js --引用自https://linux.cn/article-1314-1.html
  3. 随机分类器的ROC和Precision-recall曲线
  4. Linux下Memcached-1.4.10安装
  5. 【Android 界面效果28】Android应用中五种常用的menu
  6. selenium webdriver python 元素定位
  7. Agile/CMMI/Scrum
  8. mysql,mybatis使用中遇到的类型转化的问题
  9. linux编译内核
  10. php中常用的处理字符串的函数
  11. AngularJS进阶(二十八)解决AngualrJS页面刷新导致异常显示问题
  12. mysql-入门
  13. CDH5.16.1的maven依赖版本查询地址
  14. 局域网安全-生成树攻击-ARP攻击-MAC攻击-VTP攻击-动态VLAN的攻击
  15. Confluence实现附件下载权限的控制
  16. 一针见血tomcat
  17. codeblocks下的汇编语言
  18. linux上SVN服务器搭建后windows无法连接到服务器
  19. Oracle&#160;参数文件及相关操作介绍
  20. POJ 3253 Fence Repair (哈夫曼树)

热门文章

  1. laydate.render报错:日期格式不合法
  2. hbase 安装(集群模式)
  3. Windows下同时安装了Python2与Python3时如何使用RobotFrameWork
  4. Ubuntu 定时关机
  5. 【转帖】Infor转型十年启示录:ERP套件厂商为什么要做云平台?
  6. Centos 7搭建Gitlab服务器超详细
  7. C语言的变参列表 va_list
  8. linux redis 安装和密码设置
  9. golang ---cron
  10. ElasticSearch 调优