[关键字]:java,design pattern,设计模式,《Java与模式》学习,Strategy Pattern,策略模式
[环境]:StarUML5.0 + JDK6
[作者]:Winty (wintys@gmail.com) http://www.blogjava.net/wintys/
[正文]:
策略模式:排序算法
package pattern.strategy.sort;
/**
* 策略模式:Strategy Pattern
*
* 排序算法策略
*
* @version 2009-05-22
* @author Winty (wintys@gmail.com) http://www.blogjava.net/wintys
*
*/
public class SortStrategyTest {
public static void main(String[] args) {
Sorter<?> sorter;
Integer[] data = new Integer[]{548,85,984,3,2,44,99};
sorter = new Sorter<Integer>(data , "QuickSort");
sorter.printArray();
sorter.sort();
sorter.printArray();
String[] strs = new String[]{"B","C","D","A","X","F","E"};
sorter = new Sorter<String>(strs , "InsertionSort");
sorter.printArray();
sorter.sort();
sorter.printArray();
}
}
class Sorter<T extends Comparable<T>>{
private T[] data;
private SortStrategy<T> strategy;
@SuppressWarnings("unchecked")
public Sorter(T[] data , String sortStrategy){
this.data = data;
//利用反射动态加载策略类
String pack = this.getClass().getPackage().getName();
pack += ".";
try {
Class<?> cl = Class.forName(pack + sortStrategy);
strategy = (SortStrategy<T>) cl.newInstance();//unchecked
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public void sort(){
strategy.sort(data);
}
public void printArray(){
for(int i=0;i<data.length;i++){
System.out.print(""+data[i]+" ");
}
System.out.println("");
}
}
/**
* 抽象排序算法类
* @author Winty
*
* @param <T> 实现了Comparable<T>接口的类
*/
abstract class SortStrategy<T extends Comparable<T>>{
public abstract void sort(T[] data);
}
/**
* 插入排序
* @author Winty
*/
class InsertionSort<T extends Comparable<T>> extends SortStrategy<T>{
@Override
public void sort(T[] data) {
int len;
T temp;
len=data.length;
for(int i=1;i<len;i++){
int k;
k=0;
temp=data[i];
for(int j=i-1;j>=0;j--){
k=i;
if(data[j].compareTo(temp) > 0){
data[j+1]=data[j];
k=j;
}
else if(data[j].compareTo(temp) < 0){
k=j+1;
break;
}
}
data[k]=temp;
}
}
}
/**
* 快速排序
* @author Winty
*/
class QuickSort<T extends Comparable<T>> extends SortStrategy<T>{
@Override
public void sort(T[] data) {
quick(data , 0 , data.length - 1);
}
private void quick(T[] data , int p , int r){
int q;
if (p < r){
q = partition(data , p , r);
quick(data , p , q - 1);
quick(data , q + 1 , r);
}
}
private int partition(T[] data , int p ,int r){
int i;
T pivot , temp;
i = p - 1;
pivot = data[r];
for(int j = p; j <= r - 1;j++){
if(data[j].compareTo(pivot) < 0){
i++;
temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}
temp = data[i + 1];
data[i + 1] = data[r];
data[r] = temp;
return i + 1;
}
}
- 大小: 49.6 KB
分享到:
相关推荐
策略模式实现冒泡、快排、归并三种算法,并比较其排序时间
java设计模式中策略模式的一个实例:选择不同的排序算法(①冒泡排序;②插入排序;③选择排序)对数组进行排序。
利用java策略模式编写的一个排序方法切换,的小例子。用于学习策略模式是很好的方式。界面写的还可以,仅供大家参考学习
NULL 博文链接:https://xiaqi-2009.iteye.com/blog/1041277
java编写的几种排序算法,包括冒泡排序、快排、堆排序等,用于学习数据结构,使用Java原生sdk实现,可以运行。
策略模式(Strategy Pattern)是一种行为型设计模式,旨在将算法封装成独立的类,并使它们可以互相替换。...策略模式常用于需要在运行时根据不同条件选择不同算法的场景,如支付处理、排序和数据压缩等。
设计一个负责排序的程序包,实现多种排序算法,至少包括插入排序、冒泡排序和快速排序算法。 要求: 1.可以对任何简单类型和任意对象进行排序 2.可以支持升序、降序、字典排序等多种顺序要求 3.可以随意增加排序算法...
用java实现策略模式,strategy Patten,使用三种不同的排序算法实现策略模式,可执行代码,可直接读取文件中需要排序的数据
HYDD 算法的基本思想是对数据集进行密度排序,在此基础上选取密度大且满足距离大于密度直径的数据作为候选初始种子集,然后利用点点之间距离从大到小选取 K 个所需的种子,最后利用该初始种子集引导 K-Means 算法来...
这种算法设计策略叫做分治法。 如果原问题可分割成k个子问题,1≤n,且这些子问题都可解并可利用这些子问题的解求出原问题的解,那么这种分治法就是可行的。由分治法产生的子问题往往是原问题的较小模式,这就为使用...
策略模式是一种行为模式 。用于某一个具体的项目有多个可供选择的算法策略,客户端在其运行时根据不同需求决定使用某一具体算法策略。 策略模式也被称作政策模式。实现过程为,首先定义不同的算法策略,然后客户端...
针对高效的CABOSFV高维数据聚类算法,采用并行计算模式提高其大规模数据的处理能力,提出基于稀疏指数排序的高维数据并行聚类算法P_CABOSFV.该算法根据高维数据稀疏指数排序进行分割点选择实现数据划分,将数据分配到多...
RDF是由W3C提出的一种Web数据模型,RDF流是一种遵从链接开放数据(Linked Open Data)、扩展RDF的...改进了Max-Min蚁群优化算法,并使用改进算法重排序RDF流模式。实验表明,该方法能够高效地动态编排RDF流执行策略。
针对复杂及带噪声的数据集的聚类问题,提出了一种基于局部密度的网格排序策略(GSS-LD),并以其作为网格聚类的组织模式。GSS-LD利用聚类的局部性质进行网格单元排序,将基于网格的聚类问题转换为网格的排序问题,...
试将机器学习领域中两种较为成熟的学习排序算法GBDT和GBRank应用到选股 问题中。本文以技术分析为理论根据,先后构建了基于模式识别的短线选股策略 和基于动量和反转效应的长线选股策略。前者根据个股在过去一个月内...
2 7 模式匹配算法:Rabin–Karp 算法 38 2 8 字符串的最长回文子串:Manacher 算法 42 第 3 章 序列 44 3 1 网格中的最短路径 44 3 2 编辑距离(列文斯登距离45 3 3 最长公共子序列 47 3 4 升序最长子序列 49 3 5 两...
主要介绍了stl常用算法(Algorithms)介绍(stl排序算法、非变序型队列),需要的朋友可以参考下
使用Java实现不同排序算法的策略模式的代码。
本文实例讲述了Android编程设计模式之策略模式。分享给大家供大家参考,具体如下: 一、介绍 在软件开发中也常常遇到这样的情况:实现某一个功能可以有多种算法或者策略,我们根据实际情况选择不同的算法或者策略来...