package com.liuxt.sort;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
public class SortTemplate {
private Map<String,Sort> sortMap=new HashMap<String,Sort>();
private int maxElement = 100000;
private int dataLength=5000;
private Properties sortProperties = new Properties();
/**
* 构造一个模版类
* @throws Exception
*/
public SortTemplate() throws Exception{
this.loadSortAlgorithm();
}
/**
* 从当前的类路径下获取文本文件,把配置内容独到该类的Map结构中。
* @throws Exception
*/
private void loadSortAlgorithm() throws Exception {
InputStream inputStrem = this.getClass().getClassLoader()
.getResourceAsStream("com/liuxt/sort/sort.properties");
if (inputStrem != null) {
try {
sortProperties.load(inputStrem);
//System.out.println(sortProperties);
} catch (IOException e) {
e.printStackTrace();
}
}
String sortName="";
for(int i=0;i<SortUtil.sortNames.length;i++){
sortName=SortUtil.sortNames[i];
this.sortMap.put(sortName,this.instantiate(sortName));
}
}
/**
* 根据算法取对应的算法子类实例。
* @param name
* @return
*/
public Sort getSortByName(String name){
return this.sortMap.get(name);
}
/**
* 根据算法的名字,实例化对应的子类。
* @param name
* @return
* @throws Exception
*/
private Sort instantiate(String name) throws Exception {
String className = (String) this.sortProperties.get(name);
Sort sort = null;
if (className != null) {
try {
sort = (Sort) Class.forName(className).newInstance();
} catch (Exception e) {
//e.printStackTrace();
throw e;
}
}
return sort;
}
/**
* 根据算法的名称,去排序。
* @param name
* @param data
* @throws Exception
*/
public void sortDataByName(String algorithmName ) throws Exception {
Sort sort=this.sortMap.get(algorithmName);
if(sort==null){
throw new Exception("选择无效的算法");
}
int[] data=SortUtil.createData(this.dataLength,this.maxElement);
TimeWatch timeWatch=new TimeWatch();
timeWatch.start();
sort.sortData(data);
timeWatch.stop();
//displayData(data);
timeWatch.showElapsedTime();
SortUtil.showResult(data);
}
/**
* 获取排序算法的所有名字。
* @return
*/
public String[] getSortNames() {
String[] names=new String[this.sortMap.size()];
Iterator iterator=this.sortMap.keySet().iterator();
int i=0;
while(iterator.hasNext()){
names[i++]=(String)iterator.next();
}
return names;
}
public int getMaxElement() {
return maxElement;
}
public void setMaxElement(int maxElement) {
this.maxElement = maxElement;
}
/**
* 用所有的排序算法排序,收集数据
*
*/
public void sortDataByAll() {
String[] sortMethods=this.getSortNames();
int[] tempData;
Sort sortInstance=null;
for(int i=0;i<sortMethods.length;i++){
tempData=SortUtil.createData(this.dataLength,this.maxElement);
sortInstance=this.getSortByName(sortMethods[i]);
TimeWatch timeWatch=new TimeWatch();
timeWatch.start();
sortInstance.sortData(tempData);
timeWatch.stop();
SortUtil.setTime(sortMethods[i],timeWatch.getTimeInMillis());
}
SortUtil.showTimeStatistic();
}
public int getDataLength() {
return dataLength;
}
public void setDataLength(int dataLength) {
this.dataLength = dataLength;
}
}
分享到:
相关推荐
8. **SortTemplate**:这个可能是使用模板实现排序算法的代码,例如快速排序、归并排序等,展示了模板在算法实现中的灵活性。 通过这些文件,我们可以学习到C++的关键特性,如类设计、继承、多态、模板、STL的使用...
sort, 在"template" C 中,排序例程实现 sort.h 概述sort.h 是一个在C 中实现的大量排序算法,用用户定义的类型定义在包含时间。这意味着你不必支付使用标准库例程的函数调用开销。 这也给了我们更高级语言泛型的...
在`Sort_Template`中,冒泡排序可能被实现为一个成员函数模板,例如`template <typename T> void bubbleSort(T* arr, int size)`。函数模板允许我们在不指定具体数据类型的情况下声明和定义函数,`typename T`是一个...
标题中的"Sort-Template.rar_float"暗示这是一个关于排序模板的压缩包,特别强调了它支持对浮点数(float)进行排序。描述中提到"Sort-template u can choose int/float/fraction by tangliang",这表明这个模板是可...
C++模板类的实现,主要通过函数模板实现冒泡排序。C++ template class implementation, mainly through the bubble sort function templates.
- MongoTemplate支持MongoDB的聚合框架,如`aggregate()`方法,可以处理复杂的聚合管道操作,包括 `$match`, `$group`, `$sort`, `$project`, `$unwind` 等。 5. **索引管理**: - 通过`createIndex()`和`drop...
标准模板库(Standard Template Library,简称STL)是C++编程语言中的一个重要组成部分,它提供了一系列可重用的数据结构和算法,极大地简化了程序设计过程。STL由Alexander Stepanov和Meng Lee共同开发,其核心思想...
函数对象是一种可以像函数一样调用的对象,常用于算法,如`std::sort`的排序准则。通过模板,我们可以创建接受不同类型的函数对象。 15. **类型转换与模板**: `types`可能涉及到模板在处理类型转换中的应用,...
STL(Standard Template Library,标准模板库)是C++编程语言中的一个重要组成部分,它是通过模板机制实现的泛型编程实例。STL的核心思想是将算法与数据结构分离,提供了一种高效且灵活的方式来处理各种数据操作。...
3. **算法(Algorithms)**:提供了大量的预定义算法,如排序(sort)、搜索(search)、复制(copy)和反转(reverse)等,可以应用于任何兼容的迭代器。 4. **函数对象(Function Objects)**:也称为仿函数,...
例如,`std::sort()`可以用于对`vector`或`list`等容器进行排序,`std::find()`可以用于查找元素。 **STL编程思想总结** STL的设计原则是“分离关注点”,将数据结构(容器)和算法分离,使得两者可以独立优化。...
Use QuickSort algorithm to sort the array that has n elements that are constructed by the random() function. Requirements: The template should be used for all kinds of data type, such as: integer, ...
例如,`sort`函数可以对容器内的元素进行排序,`find`函数用于查找特定元素,`copy`可以将一个容器的内容复制到另一个容器。 **3. 迭代器** 迭代器是STL的关键概念,它类似于指针,但具有更丰富的功能,能遍历和...
template, class _Ty> inline void _Insertion_sort_1(_BI _F, _BI _L, _Ty*) { if (_F != _L) { for (_BI _M = _F; ++_M != _L; ) { _Ty _V = *_M; if (!(_V *_F)) _Unguarded_insert(_M, _V); else { ...