⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sortalgorithmimp.java

📁 用JAVA实现排序等简单算法的演示
💻 JAVA
字号:
package algorithmImp;

/**
 * 这个类作为排序算法实现的基类,是一个抽象类,提供了排序算法的一个框架,即给出要排序的数据(目前暂定
 * 只能是整数数据),排序中的几个关键操作:数据初始化(initialize)、比较(compare)与交换(swap)等,具体的
 * 排序实现由子类实现。
 *  
 * @author 周晓聪
 * @since 2007/05/29
 * @version 1.0
 * 
 */
public abstract class SortAlgorithmImp {
	private final int MAX_SIZE = 1000;			// 待排序数组的最大长度
	protected int[] data = null;					// 待排序数组
	
	protected int selectedIndex = -1;				// 选中的特别元素下标
	protected int selectedData = 0;				// 选中的特别元素的值
	
	/**
	 *  初始化待排序数据
	 * @param aData 用于初始化待排序数据的数组
	 */
	public void initialize(int[] aData) {
		int size = Math.min(aData.length, MAX_SIZE);
		
		data = new int[size];
		for (int i = 0; i < size; i++) data[i] = aData[i];
	}
	
	/**
	 *  排序算法的实现,具体实现由子类完成
	 * @precondition 数组data已经被初始化
	 * @postcondition 数组data被从小到大排序
	 */
	public abstract void sorting();
	
	/**
	 *  打印数组 data,目前只是简单地打印所有的数据
	 *
	 */
	public void println() {
		if (data == null) return;
		for (int i = 0; i < data.length; i++) System.out.print(data[i] + "  ");
		System.out.println();
	}
	public void println(int startIndex, int endIndex) {
		if (data == null) return;
		for (int i = startIndex; i < data.length && i < endIndex; i++) System.out.print(data[i] + "  ");
		System.out.println();
	}
	
	/**
	 * @return 返回内部数据
	 */
	public int[] getData() {
		return data;
	}
	
	/**
	 *  比较待排序数组中的两个位置的整数数据
	 * @param firstIndex 第一个数据在数组 data 中的下标
	 * @param secondIndex 第二个数据在数组 data 中的下标
	 * @return 若data[firstIndex] > data[secondIndex] 返回 true ,否则返回 false
	 * @precondition data 已经被初始化,即已经调用 initialize()
	 */
	protected boolean compare(int firstIndex, int secondIndex) {
		return data[firstIndex] > data[secondIndex];
	}
	
	/**
	 *  将选中的元素与 index 处元素比较
	 * @param index 待比较元素下标
	 * @return 如果 selectedData > data[index] 返回 true,否则返回 false
	 * @precondition data 已经被初始化,即已经调用 initialize()
	 */
	protected boolean compareSelectedWith(int index) {
		return selectedData > data[index];
	}
	
	/**
	 *  交换待排序数组中的两个位置的整数数据
	 * @param firstIndex 第一个数据在数组 data 中的下标
	 * @param secondIndex 第二个数据在数组 data 中的下标
	 * @precondition data 已经被初始化,即已经调用 initialize()
	 */
	protected void swap(int firstIndex, int secondIndex) {
		int temp = data[firstIndex];
		data[firstIndex] = data[secondIndex];
		data[secondIndex] = temp;
	}

	/**
	 *  将选中的元素与 index 处元素交换
	 * @param index 待交换元素的下标
	 * @precondition data 已经被初始化,即已经调用 initialize()
	 */
	protected void swapSelectedWith(int index) {
		data[selectedIndex] = data[index];
		data[index] = selectedData;
	}

	/**
	 *  选中 index 处的元素,该元素往往是当前正比较的元素,或是所选择的最小元素等等
	 * @param index 待选中元素的下标
	 * @precondition data 已经被初始化,即已经调用 initialize()
	 */
	protected void select(int index) {
		selectedIndex = index;
		selectedData = data[selectedIndex];
	}
	
	/**
	 *  将选中的元素放到 targetIndex 处
	 * @param targetIndex
	 * @precondition data 已经被初始化,即已经调用 initialize()
	 */
	protected void placeSelectedData(int targetIndex) {
		data[targetIndex] = selectedData;
	}

	/**
	 *  向后移动 startIndex 到 endIndex 处的元素,即将 endIndex - 1 处的元素移到 
	 * endIndex 等等
	 * @param startIndex 待移动元素的启示位置
	 * @param endIndex 待移动元素的终止位置,该位置处的元素不往后移动,而是被覆盖
	 * @precondition data 已经被初始化,即已经调用 initialize()
	 */
	protected void move(int startIndex, int endIndex) {
		for (int i = endIndex; i > startIndex; i--) data[i] = data[i-1];
	}
	
	protected void moveElement(int fromIndex, int toIndex) {
		data[toIndex] = data[fromIndex];
	}
	
	/**
	 * 返回选中元素的下标
	 * @return 选中元素的下标
	 * @precondition data 已经被初始化,即已经调用 initialize()
	 */
	protected int getSelectedIndex() {
		return selectedIndex;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -