`
greemranqq
  • 浏览: 966960 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

排序算法(0)--初步设计

阅读更多

最近复习了下,基本算法,发现会写,但是在应用上还是不好,也就是说不知道在什么地方用什么武功最合适! 然后想写一个工具类,可以针对常用的东西进行排序,然后计算它们的效率问题:

 

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 集合的写法,不好勿喷~。~内容会根据后面的进行修改,有好的建议,希望多指点

     

 

0
2
分享到:
评论

相关推荐

    数据结构课程设计-排序算法集成

    数据结构课程设计_排序算法集成 掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力 2. 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能 3. 提高综合运用所学的理论知识和方法...

    使用排序算法解决实际问题,初步体会文件的输入输出

    使用排序算法解决实际问题,初步体会文件的输入输出

    算法实现实验平台 - 设计与初步实现1

    背景.算法设计与分析 .平台设计与实现 .算法平台设计与实现的挑战.本文贡献 .本文组织 .第二章 相关工作堆结构和堆排序 .STL 标准模板库 .第三章

    数据结构课程设计 排序算法的比较

    通过排序算法的设计,培养学生综合利用C语言版数据结构进行程序设计的能力,加强函数的运用及学生对软件工程方法的初步认识,提高软件系统分析能力和程序文档建立、归纳总结的能力,掌握排序算法,使学生能够解决...

    算法导论(正宗中文第三版)3-1

    算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂;说明和解释力求浅显易懂,不失深度和数学严谨性。 《算法导论(原书第3版)》选材经典、内容丰富、结构合理、逻辑清晰,对本科生的数据结构课程和...

    算法导论中文版

    算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂;说明和解释力求浅显易懂,不失深度和数学严谨性。 --------------------------------------------------------------- 目录 Introduction to ...

    高清版 --《算法导论(第3版)》--中文版

    算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂;说明和解释力求浅显易懂,不失深度和数学严谨性。  《算法导论(原书第3版)》全书选材经典、内容丰富、结构合理、逻辑清晰,对本科生的数据结构...

    算法导论 原书第3版 中文完整版 高清扫描 第1 2部分

    算法以英语和伪代码的形式描述 具备初步程序设计经验的人就能看懂;说明和解释力求浅显易懂 不失深度和数学严谨性 《算法导论 原书第3版 》选材经典 内容丰富 结构合理 逻辑清晰 对本科生的数据结构课程和研究生的...

    算法导论 Thomas H.Cormen

    算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂;说明和解释力求浅显易懂,不失深度和数学严谨性。全书选材经典、内容丰富、结构合理、逻辑清晰,对本科生的数据结构课程和研究生的算法课程都是...

    算法导论_英文原版

    算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂;说明和解释力求浅显易懂,不失深度和数学严谨性。 全书选材经典、内容丰富、结构合理、逻辑清晰,对本科生的数据结构课程和研究生的算法课程都是...

    算法导论第三版

    算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂;说明和解释力求浅显易懂,不失深度和数学严谨性。 全书选材经典、内容丰富、结构合理、逻辑清晰,对本科生的数据结构课程和研究生的算法课程都是...

    算法导论 第三版 中文版

    算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂;说明和解释力求浅显易懂,不失深度和数学严谨性。全书选材经典、内容丰富、结构合理、逻辑清晰,对本科生的数据结构课程和研究生的算法课程都是...

    算法导论经典第三版

    算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂。说明和解释力求浅显易懂,不失深度和数学严谨性。 《算法导论(原书第2版)》一书自第1版出版以来,已经成为世界范围内广泛使用的大学教材和专业...

    算法导论第二版中文版

    算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂。说明和解释力求浅显易懂,不失深度和数学严谨性。 《算法导论(原书第2版)》自第1版出版以来,已经成为世界范围内广泛使用的大学教材和专业人员的...

    经典计算机教程-算法导论

    本书专门讨论了线性规划,介绍了动态规划的两个应用,随机化和线性规划技术的近似算法等,还有有关递归求解、快速排序中用到的划分方法与期望线性时间顺序统计算法,以及对贪心算法元素的讨论。本书还介绍了对强连通...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar )

    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版)/计算机科学丛书》全书选材经典、内容丰富、结构合理、逻辑清晰,对...

Global site tag (gtag.js) - Google Analytics