最近复习了下,基本算法,发现会写,但是在应用上还是不好,也就是说不知道在什么地方用什么武功最合适! 然后想写一个工具类,可以针对常用的东西进行排序,然后计算它们的效率问题:
1.首先我定义了一个接口:
/** * 排序接口 * @author @Ran * */ public interface Sort { // 基本排序方法 public <T extends Comparable<? super T>> T[] sort(T[] t); // 循环的次数 public long getCount(); // 操作的时间 public long getCostTime(); // 回调排序,计算时间 public <T extends Comparable<? super T>> T[] sort(Sort s,T[] t); }
2.然后写了一个抽象的实现类(~。~这里仿照集合框架写的)
/** * 提供了基本实现 * @author @Ran * * @param <T> */ public abstract class AbstractSort<T> implements Sort{ // 计算排序的次数 protected transient long count = 0; // 计算排序花费的时间 protected transient long cost = 0; public long getCount(){ return count; } public long getCostTime(){ return cost; } // 计算时间 public <T extends Comparable<? super T>> T[] sort(Sort s,T[] t){ long beginTime = System.currentTimeMillis(); s.sort(t); cost = System.currentTimeMillis() - beginTime; return t; } // 元素交换 public <T extends Comparable<? super T>> T[] swap(T[] t,int i,int j){ if(i != j){ T tem = t[i]; t[i] = t[j]; t[j] = tem; count++; } return t; } // 比较器 public <T extends Comparable<? super T>> int commpare(T[] t,int i,int j){ int flag = t[i].compareTo(t[j]); if ( flag > 0) { swap(t,i,j); } return flag; } // 赋值的时候,也算做一次交换操作 public <T extends Comparable<? super T>> void setValue(T[] t,int i,int j){ t[i] = t[j]; count ++; } public <T extends Comparable<? super T>> void setValue(T[] t,int i,T value){ t[i] = value; count ++; } @Override public String toString() { return "count:"+count+",cost:"+cost; } }
3.我们就可以对常用算法 进行操作了,假设我实现了一个 冒泡排序:Bubble
public class Test { public static void main(String[] args) { // 字符串会默认转正ASSIC 码,以首字母进行比较,比如a=97,相同则比较下一个 String[] t = new String[]{"4","3","2","7","1","f","ad","asd","5"}; Sort s = new Bubble(); // 需要时间久用这个,不用就直接sort s.sort(s,t); System.out.println("操作的次数:"+s.getCount()); System.out.println("操作的时间:"+s.getCostTime()); System.out.println("排序后结果:"+Arrays.toString(t)); System.out.println(s.toString()); } }
小结:
1.这里仅仅对基本排序做了操作,利用了自带的Comparable 接口。当然后期我们会进行扩展,支持多 种排序方式。先把基本的搞完!
2.这里仿照JAVA 集合的写法,不好勿喷~。~内容会根据后面的进行修改,有好的建议,希望多指点
相关推荐
数据结构课程设计_排序算法集成 掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力 2. 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能 3. 提高综合运用所学的理论知识和方法...
使用排序算法解决实际问题,初步体会文件的输入输出
背景.算法设计与分析 .平台设计与实现 .算法平台设计与实现的挑战.本文贡献 .本文组织 .第二章 相关工作堆结构和堆排序 .STL 标准模板库 .第三章
通过排序算法的设计,培养学生综合利用C语言版数据结构进行程序设计的能力,加强函数的运用及学生对软件工程方法的初步认识,提高软件系统分析能力和程序文档建立、归纳总结的能力,掌握排序算法,使学生能够解决...
算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂;说明和解释力求浅显易懂,不失深度和数学严谨性。 《算法导论(原书第3版)》选材经典、内容丰富、结构合理、逻辑清晰,对本科生的数据结构课程和...
算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂;说明和解释力求浅显易懂,不失深度和数学严谨性。 --------------------------------------------------------------- 目录 Introduction to ...
算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂;说明和解释力求浅显易懂,不失深度和数学严谨性。 《算法导论(原书第3版)》全书选材经典、内容丰富、结构合理、逻辑清晰,对本科生的数据结构...
算法以英语和伪代码的形式描述 具备初步程序设计经验的人就能看懂;说明和解释力求浅显易懂 不失深度和数学严谨性 《算法导论 原书第3版 》选材经典 内容丰富 结构合理 逻辑清晰 对本科生的数据结构课程和研究生的...
算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂;说明和解释力求浅显易懂,不失深度和数学严谨性。全书选材经典、内容丰富、结构合理、逻辑清晰,对本科生的数据结构课程和研究生的算法课程都是...
算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂;说明和解释力求浅显易懂,不失深度和数学严谨性。 全书选材经典、内容丰富、结构合理、逻辑清晰,对本科生的数据结构课程和研究生的算法课程都是...
算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂;说明和解释力求浅显易懂,不失深度和数学严谨性。 全书选材经典、内容丰富、结构合理、逻辑清晰,对本科生的数据结构课程和研究生的算法课程都是...
算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂;说明和解释力求浅显易懂,不失深度和数学严谨性。全书选材经典、内容丰富、结构合理、逻辑清晰,对本科生的数据结构课程和研究生的算法课程都是...
算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂。说明和解释力求浅显易懂,不失深度和数学严谨性。 《算法导论(原书第2版)》一书自第1版出版以来,已经成为世界范围内广泛使用的大学教材和专业...
算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂。说明和解释力求浅显易懂,不失深度和数学严谨性。 《算法导论(原书第2版)》自第1版出版以来,已经成为世界范围内广泛使用的大学教材和专业人员的...
本书专门讨论了线性规划,介绍了动态规划的两个应用,随机化和线性规划技术的近似算法等,还有有关递归求解、快速排序中用到的划分方法与期望线性时间顺序统计算法,以及对贪心算法元素的讨论。本书还介绍了对强连通...
3.1 面向过程的程序设计和算法 3.1.1 算法的概念 3.1.2 算法的表示 3.2 C++程序和语句 3.3 赋值语句 3.4 C++的输入与输出 *3.4.1 输入流与输出流的基本操作 *3.4.2 在输入流与输出流中使用控制符 3.4.3 用...
《算法导论》一书深入浅出,全面地介绍了计算机算法。对每一个算法的分析既易于理解又十分有趣,...算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂。说明和解释力求浅显易懂,不失深度和数学严谨性。
算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂;说明和解释力求浅显易懂,不失深度和数学严谨性。 《算法导论(原书第3版)/计算机科学丛书》全书选材经典、内容丰富、结构合理、逻辑清晰,对...