`
liu0107613
  • 浏览: 74123 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

SortTemplate

    博客分类:
  • java
阅读更多

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;
 }

}

分享到:
评论

相关推荐

    C++ 资料 包括个人的一些学习源代码

    8. **SortTemplate**:这个可能是使用模板实现排序算法的代码,例如快速排序、归并排序等,展示了模板在算法实现中的灵活性。 通过这些文件,我们可以学习到C++的关键特性,如类设计、继承、多态、模板、STL的使用...

    sort, 在"template" C 中,排序例程实现.zip

    sort, 在"template" C 中,排序例程实现 sort.h 概述sort.h 是一个在C 中实现的大量排序算法,用用户定义的类型定义在包含时间。这意味着你不必支付使用标准库例程的函数调用开销。 这也给了我们更高级语言泛型的...

    Sort_Template.rar_template sort_排序类Sort_类模板

    在`Sort_Template`中,冒泡排序可能被实现为一个成员函数模板,例如`template &lt;typename T&gt; void bubbleSort(T* arr, int size)`。函数模板允许我们在不指定具体数据类型的情况下声明和定义函数,`typename T`是一个...

    Sort-Template.rar_float

    标题中的"Sort-Template.rar_float"暗示这是一个关于排序模板的压缩包,特别强调了它支持对浮点数(float)进行排序。描述中提到"Sort-template u can choose int/float/fraction by tangliang",这表明这个模板是可...

    Sort_Template.rar_The Class

    C++模板类的实现,主要通过函数模板实现冒泡排序。C++ template class implementation, mainly through the bubble sort function templates.

    mongoTemplate工具类Dao层方法封装.zip

    - MongoTemplate支持MongoDB的聚合框架,如`aggregate()`方法,可以处理复杂的聚合管道操作,包括 `$match`, `$group`, `$sort`, `$project`, `$unwind` 等。 5. **索引管理**: - 通过`createIndex()`和`drop...

    The Standard Template Library

    标准模板库(Standard Template Library,简称STL)是C++编程语言中的一个重要组成部分,它提供了一系列可重用的数据结构和算法,极大地简化了程序设计过程。STL由Alexander Stepanov和Meng Lee共同开发,其核心思想...

    example of c++ template

    函数对象是一种可以像函数一样调用的对象,常用于算法,如`std::sort`的排序准则。通过模板,我们可以创建接受不同类型的函数对象。 15. **类型转换与模板**: `types`可能涉及到模板在处理类型转换中的应用,...

    STL(Standard Template Library)入门手册

    STL(Standard Template Library,标准模板库)是C++编程语言中的一个重要组成部分,它是通过模板机制实现的泛型编程实例。STL的核心思想是将算法与数据结构分离,提供了一种高效且灵活的方式来处理各种数据操作。...

    Standard Template Library (STL)

    3. **算法(Algorithms)**:提供了大量的预定义算法,如排序(sort)、搜索(search)、复制(copy)和反转(reverse)等,可以应用于任何兼容的迭代器。 4. **函数对象(Function Objects)**:也称为仿函数,...

    standard template library 基础知识

    例如,`std::sort()`可以用于对`vector`或`list`等容器进行排序,`std::find()`可以用于查找元素。 **STL编程思想总结** STL的设计原则是“分离关注点”,将数据结构(容器)和算法分离,使得两者可以独立优化。...

    quick sort

    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, ...

    Standard Template Library Programmer's Guide

    例如,`sort`函数可以对容器内的元素进行排序,`find`函数用于查找特定元素,`copy`可以将一个容器的内容复制到另一个容器。 **3. 迭代器** 迭代器是STL的关键概念,它类似于指针,但具有更丰富的功能,能遍历和...

    sortAlgorithm

    template, class _Ty&gt; 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 { ...

Global site tag (gtag.js) - Google Analytics