排序的通用方法

mport java.util.Arrays;
import java.util.List;

/**
 * 排序
 * @author Administrator
 *
 */
public class Utils {

        /**
	 * List排序+比较器
	 * @param list
	 * @param com
	 */
	
	public static <T> void sort(List<T> list,Comparator<T> com){
		
		// 第一步:轉成數組
		Object[] arr = list.toArray();
		sort(arr,com);
		// 第二步:改變容器中對應的值
		for (int i = 0; i < arr.length; i++) {
			list.set(i, (T) (arr[i]));
		}
	}
	
	
	
	/**
	 * 数组的排序(降序)+Comparator接口
	 * @param arr
	 */
	public static <T> void sort(Object[] arr,Comparator<T> com){

		boolean sorted = true;
		int len = arr.length;
		for(int j=0;j<len-1;j++){//趟数
			sorted=true;//假定有序
			for(int i=0;i<len-1-j;i++){//次数
				if( com.compare((T)arr[i],(T)arr[i+1])<0){
					Object temp = arr[i];
					arr[i]=arr[i+1];
					arr[i+1]=temp;
					sorted=false;//假定失败
				}
			}
			if(sorted){
				break;
			}
		}
	}
	/**
	 * 容器排序(使用泛型方法)
	 */
	public static <T extends Comparable<T>> void sort3(List<T> list){
		//第一步:轉成數組
		Object[] arr=list.toArray();
		sort(arr);
		//第二步:改變容器中對應的值
		for(int i=0;i<arr.length;i++){
			list.set(i, (T)(arr[i]));
		}
		
		
	}
	
	
	/**
	 * 数组排序(使用泛型方法)
	 */
	public static <T extends Comparable<T>> void sort2(T[] arr){
		
		boolean sorted = true;
		int len = arr.length;
		for(int j=0;j<len-1;j++){//趟数
			sorted=true;//假定有序
			System.out.println("第"+(j+1)+"趟");
			for(int i=0;i<len-1-j;i++){//次数
				System.out.println("第"+(i+1)+"次");
				if( ((Comparable)arr[i]).compareTo(arr[i+1])>0){
					T temp = arr[i];
					arr[i]=arr[i+1];
					arr[i+1]=temp;
					sorted=false;//假定失败
				}
				System.out.println(Arrays.toString(arr));
			}
			if(sorted){
				break;
			}
		}
		System.out.println(Arrays.toString(arr));
		
	}
	
	
	/**
	 * 数组的排序(降序)
	 * @param arr
	 */
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public static void sort(Object[] arr){
		
		boolean sorted = true;
		int len = arr.length;
		for(int j=0;j<len-1;j++){//趟数
			sorted=true;//假定有序
			System.out.println("第"+(j+1)+"趟");
			for(int i=0;i<len-1-j;i++){//次数
				System.out.println("第"+(i+1)+"次");
				if( ((Comparable)arr[i]).compareTo(arr[i+1])>0){
					Object temp = arr[i];
					arr[i]=arr[i+1];
					arr[i+1]=temp;
					sorted=false;//假定失败
				}
				System.out.println(Arrays.toString(arr));
			}
			if(sorted){
				break;
			}
		}
		System.out.println(Arrays.toString(arr));
		
	}
}


测试:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Demo03 {

	public static void main(String[] args) {
		
		String str[]={"a","abcd","abc","def"};
		Utils.sort2(str);
		System.out.println(Arrays.toString(str)+"--");
		
		//存放到容器中
		List<String> list = new ArrayList<String>();
		list.add("a");
		list.add("abcd");
		list.add("abc");
		Utils.sort3(list);
		System.out.println(list);
		System.err.println(list);
		
	}
}


你可能感兴趣的:(排序的通用方法)