排序算法 — SortBase类

版权声明:未经允许,请勿侵权 https://blog.csdn.net/sunLeon1993/article/details/81592670

准确的说,SortBase类是一个排序辅助类。

在进行排序算法的演示过程当中,将需要用的公共方法(生成随机数组、验证是否排序、测试排序性能等)抽取出来,最大程度上,实现代码的复用。

直接贴代码:

package com.loveyou.sort;

import java.lang.reflect.Method;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
 * @author Lemon Sun
 * @time 2018年8月11日 下午10:51:13
 * @version 1.0
 */
public class SortBase {

	public static Logger log = LoggerFactory.getLogger(SortBase.class);

	/**
	 * 生成指定位数,指定范围的整型数组
	 * 
	 * @param n
	 *            指定位数
	 * @param min
	 *            最小值
	 * @param max
	 *            最大值
	 * @return 生成后的数组
	 * @throws Exception
	 */
	public static Integer[] genRandomArr(int n, int min, int max) throws Exception {
		// 校验参数
		if (n < 0 || max <= min || max < 0) {
			throw new Exception("输入的参数异常,请检查!");
		}
		Integer[] arr = new Integer[n];
		for (int i = 0; i < n; i++) {
			arr[i] = (int) (Math.random() * (max - min + 1) + min);
		}
		return arr;
	}

	/**
	 * 通过反射的方式来测试排序数组的效率
	 * 
	 * @param className
	 *            类名
	 * @param methodName
	 *            方法名
	 * @param arr
	 *            参数
	 */
	@SuppressWarnings({"rawtypes", "unchecked"})
	public static void testSort(String className, String methodName, Comparable[] arr) {
		try {
			Class sortClass = Class.forName(className);
			// 获取方法,参数是一个可比较的数组
			Method method = sortClass.getMethod(methodName,new Class[]{Comparable[].class});
			Object[] params = new Object[]{arr};
			long startTime = System.currentTimeMillis();
			method.invoke(null, params);
			long endTime = System.currentTimeMillis();
			ifSorted(arr);
			System.out.println("运行时间:" + (endTime - startTime) + " ms");
		} catch (Exception e) {
			log.error(e.getMessage(), e);
		}
	}

	/**
	 * 判断是否有序
	 * @param arr
	 * @return
	 */
	@SuppressWarnings({"rawtypes", "unchecked"})
	public static boolean ifSorted(Comparable[] arr) {
		int length = arr.length;
		for (int i = 0; i < length - 1; i++) {
			if (arr[i].compareTo(arr[i + 1]) > 0) {
				log.warn("is not sorted.");
				return false;
			}
		}
		log.info("already sorted.");
		return true;
	}
	
	public static void swap(Object[] arr,int i,int j) {
		Object temp = arr[i];
		arr[i] = arr[j];
		arr[j] = temp;
	}

	/**
	 * 打印数组
	 * 
	 * @param arr
	 */
	@SuppressWarnings("rawtypes")
	public static void printArr(Comparable[] arr) {
		int length = arr.length;
		if (length < 0) {
			return;
		}
		for (int i = 0; i < length; i++) {
			System.out.print(arr[i] + " ");
		}
		System.out.println();
	}
}

 

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页