快速排序
下面的是一个用到的快速排序
/**
* 将发生变化 的东西封闭起来
* @author lsj
*
*/
public interface Compare {
boolean lessThan (Object lhs ,Object rhs );
boolean lessThanOrEqual(Object lhs , Object rhs ) ;
}
再一个文件
import java.util.Vector;
/**
* 利用回调,经常发生变化的那部分代码会封装到它自己
* 的类内,而总是保持相同的代码则“回调”发生变化的代码。
*
* “ 回调”一词的来历:这是由于 quickSort() 方法“往回调用”了 Compare 中的方法。
* 从中亦可理解这种技术如何生成通用的、可重复利用(再生)的代码。
* @author lsj
*
*/
public class SortVector extends Vector{
private Compare compare ;//to hold the callback
public SortVector(Compare compare){
this.compare = compare ;
}
public void sort (){
quickSort( 0, size()-1) ;
}
private void quickSort (int left , int right ){
if (right> left){
Object o1 = elementAt(right) ;
int i = left-1 ;
int j = right;
while(true){
while( compare.lessThan(elementAt(++i), o1));
while (j > 0)
if (compare.lessThanOrEqual(elementAt(--j), o1))
break;
if (i >= j)
break;
swap(i, j);
}
swap(i, right) ;
//递归 ?
quickSort(left, i - 1);
quickSort(i + 1, right);
}
}
private void swap(int loc1, int loc2) {
Object tmp = elementAt(loc1) ;
setElementAt(elementAt(loc2), loc1);
setElementAt(tmp, loc2) ;
}
}
最后测试
import java.util.Enumeration;
/**
* 为使用 SortVector,必须创建一个类,令其为我们准备排序
* 的对象实现 Compare。此时内部类并不显得特别重要,但对于代码的组织却是有益的
* @author lsj
*
*/
public class StringSortTest {
static class StringCompare implements Compare{
public boolean lessThan(Object lhs, Object rhs) {
return ((String)lhs).toLowerCase().compareTo(
((String)rhs).toLowerCase())<0;
}
public boolean lessThanOrEqual(Object lhs, Object rhs) {
return ((String)lhs).toLowerCase().compareTo(
((String)rhs).toLowerCase()) <= 0;
}
}
public static void main(String [] args ){
SortVector sv = new SortVector(new StringCompare()) ;
sv.addElement("d");
sv.addElement("A");
sv.addElement("C");
sv.addElement("c");
sv.addElement("b");
sv.addElement("B");
sv.addElement("D");
sv.addElement("a");
sv.sort() ;
Enumeration e = sv.elements() ;//Enumeration是一个接口
while (e.hasMoreElements()) {
System.out.println(e.nextElement()) ;
}
}
}

浙公网安备 33010602011771号