zoukankan      html  css  js  c++  java
  • 排序接口与抽象类(java)

    定义一个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)方法即可。

  • 相关阅读:
    征战蓝桥 —— 2016年第七届 —— C/C++A组第5题——消除尾一
    UVA 10410 Tree Reconstruction (树重建)
    UVA 12166 Equilibrium Mobile (修改天平)(dfs字符串表示的二叉树)
    UVA 1600 Patrol Robot (巡逻机器人)(bfs)
    UVA 712 STrees(S树)
    UVA 536 Tree Recovery (二叉树重建)
    Stall Reservations【贪心】【堆】
    Sunscreen【贪心】
    Sunscreen【贪心】
    Sunscreen【贪心】
  • 原文地址:https://www.cnblogs.com/bsc2012/p/9212008.html
Copyright © 2011-2022 走看看