Sorter {
    public abstract void sort(int[] arr);
}

下面是三种排序:

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

 

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

 

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

下面是测试代码:

 

 Test {
    public static void main(String[] args) {
        
int[] a={1,8,4,12,3,41,23};
        SortContext sort 
= new SortContext("BubbleSort"); //只要知道一个类就行。
        sort.invoke(a);
    }
}

相关文章: