📄 sortalgorithmimp.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 + -