com.victor.sort.algorithms.SortAlgorithms

package com.victor.sort.algorithms;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;

import com.victor.sort.seeds.Seeds;

/**
 * 一个抽象的排序算法,提供了一些统计和公共的方法包装
 * @author 黑妹妹牙膏
 */
public abstract class SortAlgorithms {
	private static final DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
	private long moveMent = 0;
	private ArrayList<Integer> sortedList = new ArrayList<Integer>();
	
	/**
	 * 当前的时间
	 * @return
	 */
	public static String currentDateTime()
	{
		String datetime = df.format(new java.util.Date());
		return datetime;
	}
	
	/**
	 * 统计数据移动了多少次
	 * @return
	 */
	public long getMoveMent()
	{
		return moveMent;
	}
	
	/**
	 * 移动次数加1
	 */
	public void moveMentIncrease()
	{
		moveMent++;
	}
	
	/**
	 * 排序
	 * @param seed 待排序的数字类型
	 */
	public void sort(Seeds seed)
	{
		ArrayList<Integer> Alist = seed.getSeeds();
		sortedList.clear();
		System.out.println("Algorithm "+getName()+" Start    with size "+Alist.size()+":"+currentDateTime());
		sortedList = doSort(Alist);
		System.out.println("Algorithm "+getName()+" Finished with size "+Alist.size()+":"+currentDateTime());
		System.out.println("Total data swap "+getMoveMent()+" times");
	}
	
	/**
	 * 排序
	 * @param seed 待排序的数字类型
	 * @param size 待排序的数字个数
	 */
	public void sort(Seeds seed,int size)
	{
		if(seed == null) return;
		if(size <= 0) return;
		System.out.println("----------------------------------------");
		System.out.println("seed: "+ seed.getName());
		seed.setSize(size);
		seed.generate();
		clear();
		sort(seed);
	}
	
	/**
	 * 返回排序后的数字集合
	 * @return
	 */
	public ArrayList<Integer> getSortedList()
	{
		return sortedList;
	}
	
	/**
	 * 排序算法的名称
	 * @return
	 */
	public abstract String getName();
	
	/**
	 * 具体的排序逻辑
	 * @param aList
	 * @return
	 */
	protected abstract ArrayList<Integer> doSort(ArrayList<Integer> aList);
	
	/**
	 * 打印排序完成后的集合
	 */
	public void print()
	{
		System.out.println("Items after sorted:");
		System.out.println("#######################################");
		for(int i=0;i<sortedList.size();i++)
		{
			System.out.println(i+": "+sortedList.get(i));
		}
		System.out.println("#######################################");
	}
	
	/**
	 * 打印一个数字集合
	 * @param a Integer的集合
	 */
	public void print(ArrayList<Integer> a)
	{
		System.out.println("Items after sorted:");
		System.out.println("#######################################");
		for(int i=0;i<a.size();i++)
		{
			System.out.println(i+": "+a.get(i));
		}
		System.out.println("#######################################");
	}
	
	/**
	 * 重置
	 */
	public void clear()
	{
		moveMent = 0;
		sortedList = new ArrayList<Integer>();
	}
}

你可能感兴趣的:(排序算法)