抽象排序类
package com.kai;
public abstract class Sorter {
public abstract void sort(int[] arr);
}
package com.kai;
public abstract class Sorter {
public abstract void sort(int[] arr);
}
下面是三种排序:
冒泡排序
package com.kai;
public class BubbleSort extends Sorter {
public void sort(int[] arr) {
// 冒泡排序
for(int i=0;i<arr.length-1;i++)
for(int j=0;j<arr.length-i-1;j++)
if(arr[j]>arr[j+1]){
arr[j]=arr[j]+arr[j+1];
arr[j+1]=arr[j]-arr[j+1];
arr[j]=arr[j]-arr[j+1];
}
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
package com.kai;
public class BubbleSort extends Sorter {
public void sort(int[] arr) {
// 冒泡排序
for(int i=0;i<arr.length-1;i++)
for(int j=0;j<arr.length-i-1;j++)
if(arr[j]>arr[j+1]){
arr[j]=arr[j]+arr[j+1];
arr[j+1]=arr[j]-arr[j+1];
arr[j]=arr[j]-arr[j+1];
}
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
插入排序法
package com.kai;
public class InsertSort extends Sorter {
public void sort(int[] arr) {
// 插入排序法
for(int i=1;i<arr.length;i++){
int t=arr[i];
int f=i;
while(f>0&&arr[f-1]>=t){
arr[f]=arr[f-1];
f--;
}
arr[f]=t;
}
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
package com.kai;
public class InsertSort extends Sorter {
public void sort(int[] arr) {
// 插入排序法
for(int i=1;i<arr.length;i++){
int t=arr[i];
int f=i;
while(f>0&&arr[f-1]>=t){
arr[f]=arr[f-1];
f--;
}
arr[f]=t;
}
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
选择排序
package com.kai;
public class SelectSort extends Sorter {
public void sort(int[] arr) {
// 选择排序
for(int i=0;i<arr.length-1;i++){
int min=i;
for(int j=i+1;j<arr.length;j++){
if(arr[j]<arr[min])
min=j;
}
int t=arr[min];
arr[min]=arr[i];
arr[i]=t;
}
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
package com.kai;
public class SelectSort extends Sorter {
public void sort(int[] arr) {
// 选择排序
for(int i=0;i<arr.length-1;i++){
int min=i;
for(int j=i+1;j<arr.length;j++){
if(arr[j]<arr[min])
min=j;
}
int t=arr[min];
arr[min]=arr[i];
arr[i]=t;
}
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
策略类
package com.kai;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class SortContext {
private Object sorter;
private static final String CLASS_PATH="com.kai.";
public SortContext(String className){
try {
sorter = Class.forName(CLASS_PATH+className).newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public void invoke(int[] arr){
try {
Object[] obj=new Object[1];
obj[0]=arr;
Method sort = sorter.getClass().getMethods()[0];
sort.invoke(sorter,obj);
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
package com.kai;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class SortContext {
private Object sorter;
private static final String CLASS_PATH="com.kai.";
public SortContext(String className){
try {
sorter = Class.forName(CLASS_PATH+className).newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public void invoke(int[] arr){
try {
Object[] obj=new Object[1];
obj[0]=arr;
Method sort = sorter.getClass().getMethods()[0];
sort.invoke(sorter,obj);
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
下面是测试代码:
Code
package com.kai;
public class Test {
public static void main(String[] args) {
int[] a={1,8,4,12,3,41,23};
SortContext sort = new SortContext("BubbleSort"); //只要知道一个类就行。
sort.invoke(a);
}
}
package com.kai;
public class Test {
public static void main(String[] args) {
int[] a={1,8,4,12,3,41,23};
SortContext sort = new SortContext("BubbleSort"); //只要知道一个类就行。
sort.invoke(a);
}
}