最近复习了下,基本算法,发现会写,但是在应用上还是不好,也就是说不知道在什么地方用什么武功最合适! 然后想写一个工具类,可以针对常用的东西进行排序,然后计算它们的效率问题:
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 集合的写法,不好勿喷~。~内容会根据后面的进行修改,有好的建议,希望多指点
相关推荐
3. **接口与扩展**:设计了堆排序算法的接口,使得用户可以轻松地切换不同的实现策略,或者添加新的排序算法。 4. **应用实例**:利用Intel Lab Data数据进行分析,验证了AlgSmith平台对于数据处理和算法应用的支持...
通过设计和实现排序算法,学生们可以深入理解函数的运用,并初步接触软件工程方法,增强软件系统分析能力。此外,此过程还将培养学生的程序文档建立和归纳总结技巧,使他们能有效地解决实际的信息管理系统中的排序...
本实验指导将关注如何利用C++程序设计,通过排序算法解决实际问题,并初次接触文件的输入输出操作。在这个过程中,我们将涉及以下几个关键知识点: 1. **排序算法**:排序算法是计算机科学中最基本的数据处理技术之...
根据提供的文档信息,本文将详细解析《排序算法集锦》课程设计中的主要知识点,包括不同排序算法的思想、设计原理以及应用场景等。 ### 需求分析 本演示程序旨在通过一组数值型数组来演示多种排序算法的效果。这些...
2. **算法分类**:书中可能涵盖了排序算法(如冒泡排序、选择排序、插入排序、快速排序等)、查找算法(如线性查找、二分查找)、图算法(如深度优先搜索、广度优先搜索)和动态规划等经典算法类别。 3. **算法分析...
* 排序算法:介绍了排序算法,包括冒泡排序、选择排序、插入排序、归并排序、快速排序等。 * 选择问题:介绍了选择问题的定义、计算方法和应用场景。 第四章 贪心算法 * 算法的基本思想:介绍了贪心算法的基本思想...
- 排序算法,如冒泡排序、插入排序、快速排序、归并排序等,会在作业中得到实践和应用。 4. **递归与分治策略** - 递归是解决问题的一种强大工具,例如在解决汉诺塔、斐波那契数列等问题时会用到。 - 分治策略是...
冒泡排序、插入排序和选择排序是三种基本的排序...理解并掌握这些基础排序算法有助于我们更好地理解和设计更复杂的排序算法。在编程实践中,熟练运用这些算法可以提高代码的效率和可读性,对于提升编程技能至关重要。
- **排序算法**:如冒泡排序、选择排序、插入排序、快速排序、归并排序和堆排序等,这些都是初学者必须掌握的基本算法。它们各自有优缺点,理解其工作原理对于解决实际问题至关重要。 - **搜索算法**:线性搜索、...
适合人群:适合对排序算法有初步了解的数据结构与算法爱好者和开发者。 使用场景及目标:可用于深入理解经典排序算法的实现机制,提升程序设计能力。同时适用于处理大数据量排序任务。 阅读建议:通过动手尝试实现...
本报告记录了使用 C++ 初步实现的七种排序算法的基本原理及其在实际样例下的性能评估结果。这些算法包括: 冒泡排序(Bubble Sort) 选择排序(Selection Sort) 插入排序(Insertion Sort) 归并排序(Merge Sort)...
排序算法作为算法设计中的一个基础话题,在第五章中被重点讨论。从冒泡排序到快速排序,再到归并排序,教材不仅介绍了各种排序算法的原理与实现,还分析了它们的时间复杂度和空间复杂度。通过这一章节的学习,学生...
- 深入讨论了各种排序算法(插入排序、选择排序、冒泡排序、快速排序、归并排序、堆排序)及其时间复杂度。 - 讨论了查找算法(顺序查找、二分查找、哈希查找)及其效率比较。 8. **第8章:数据结构** - 系统地...
1. **基础算法思想**:习题可能会涉及如何运用基础的算法思想来解决具体问题,比如排序算法(冒泡排序、快速排序等)和搜索算法(二分查找、广度优先搜索等)。 2. **复杂度分析**:习题可能要求对算法的时间复杂度...
第三章通常会深入到排序算法,比如冒泡排序、插入排序、选择排序、快速排序、归并排序和堆排序等。这些排序算法各有优缺点,理解和掌握它们的实现原理对于优化算法性能至关重要。 第四章可能会涵盖图论和图算法,如...
总结来说,Ginors Sort是一种针对含有二进制密钥的数据结构设计的排序算法,它的核心是利用位操作进行快速比较和排序。开源的特性使得我们有机会深入研究算法的内部运作,并参与到其改进和优化的过程中。通过分析...
例如,可以先使用Cuthill-McKee算法进行初步优化,然后再使用GPS算法进一步减小带宽。这种混合方法能够充分利用各种算法的优点,提高整体性能。 #### 实际应用案例 为了验证上述算法的有效性,研究人员进行了大量...
《算法设计与分析(第二版)程序源码》是一份宝贵的教育资源,主要涵盖了贪心法、分治法和分支限界等重要的算法设计策略。这些方法在计算机科学中扮演着核心角色,对于教师和学生深入理解和应用算法具有极大的价值。...
《计算机算法设计与分析》是计算机科学领域的重要课程,它主要关注如何有效地解决问题,并通过设计高效、可理解的算法来实现。这套由王晓东教授编写的课件包含了完整的教学内容,共10个PPT,涵盖了从基础概念到高级...