结构
MySort.java 实际业务中我们可能会使用任意一种排序方法
package pers.zander.edu.arithmetic.sort;/** * 排序接口 * @author * @time 2016-5-10 上午9:55:05 */public interface MySort { //排序抽象方法,子类自定义实现 public void insertSort(String name,int array[]);}
MySortErfenImpl.java
package pers.zander.edu.arithmetic.sort;/** * 二分法实现排序 * @author * @time 2016-5-10 上午9:55:45 */public class MySortErfenImpl implements MySort{ @Override public void insertSort(String name, int[] array) { for (int i = 0; i < array.length; i++) { int a = array[i]; int l = 0; int r = i-1; int m = 0; while(l<=r){ m = (l+r)/2; if(a= l; j--) { array[j+1]=array[j]; } if(l!=i){ array[l]=a; } } } }
MySortZhijieImpl.java
package pers.zander.edu.arithmetic.sort;/** * 直接法实现排序 * @author * @time 2016-5-10 上午9:56:15 */public class MySortZhijieImpl implements MySort{ @Override public void insertSort(String name,int[] array) { for (int i = 1; i < array.length; i++) { int a = array[i]; for (int j = 0; j < i; j++) { int b = array[j]; if (a < b) { int c = array[i]; array[i] = array[j]; array[j] = c; } } } }}
MySortXierImpl.java
package pers.zander.edu.arithmetic.sort;/** * 希尔法实现排序 * @author * @time 2016-5-10 上午9:56:01 */public class MySortXierImpl implements MySort{ @Override public void insertSort(String name, int[] array) { int l = array.length; int s = 0; int m = l/2; while (true) { m = m-1; for (int i = 0; i < array.length-m; i++) { s++; if(array[i]>array[i+m]){ int temp = array[i]; array[i]=array[i+m]; array[i+m]=temp; } } if(m==1){ break; } } System.out.println(s); } }
SortFactory.java 工厂抽象类
package pers.zander.edu.arithmetic.sort;/** * 排序工厂抽象类 * @author * @time 2016-5-10 上午9:56:28 */public abstract class SortFactory implements MySort{ public abstract MySort createZhijie(); public abstract MySort createXier(); public abstract MySort createErfen(); public abstract MySort createSort(String name);}
SortFactoryImpl.java 工厂实现类
package pers.zander.edu.arithmetic.sort;/** * 排序工厂实现类 * @author * @time 2016-5-10 上午9:56:43 */public class SortFactoryImpl extends SortFactory{ @Override public void insertSort(String name,int[] array) { if("zhijie".equals(name)){ new MySortZhijieImpl().insertSort("",array); }else if("erfen".equals(name)){ new MySortErfenImpl().insertSort("",array); }else if("xier".equals(name)){ new MySortXierImpl().insertSort("",array); }else if("maopao".equals(name)){ new MySortMaopaoImpl().insertSort("",array); } } @Override public MySort createSort(String name) { if("zhijie".equals(name)){ return new MySortZhijieImpl(); }else if("erfen".equals(name)){ return new MySortErfenImpl(); }else if("xier".equals(name)){ return new MySortXierImpl(); }else{ return null; } } @Override public MySortZhijieImpl createZhijie() { // TODO Auto-generated method stub return new MySortZhijieImpl(); } @Override public MySortXierImpl createXier() { // TODO Auto-generated method stub return new MySortXierImpl(); } @Override public MySortErfenImpl createErfen() { // TODO Auto-generated method stub return new MySortErfenImpl(); }}
TestFactorySort.java
package pers.zander.edu.arithmetic.sort;/** * 测试类 * @author * @time 2016-5-10 上午9:58:08 */public class TestFactorySort { public static void main(String[] args) { SortFactory sf = new SortFactoryImpl(); int array[]={3,5,2,78,55,45,36,47,89,54,16,77,0,89}; for (int i = 0; i < array.length; i++) { System.out.print(array[i]+","); } System.out.println(""); //1-在这里判断需要用哪个排序方法// sf.createXier().insertSort("",array); //2// MySortZhijieImpl ms = (MySortZhijieImpl) sf.createSort("zhijie");// if(ms!=null){// ms.insertSort("",array);// } //3-推荐 代码简洁 sf.insertSort("maopao", array); for (int i = 0; i < array.length; i++) { System.out.print(array[i]+","); } }}
欢迎各位大神来指教。。。