zoukankan      html  css  js  c++  java
  • 快速排序

    下面的是一个用到的快速排序

    /**
     * 将发生变化 的东西封闭起来
     * @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()) ;
    		}
    	}
    }
    

      

     

  • 相关阅读:
    latex插入图片
    装virtualenv和flask
    GitHub Pages写博客
    用模拟退火算法进行特征选择
    用遗传算法进行特征选择
    智能垃圾桶
    蚁群算法 与 A*算法 寻找最优路径 对比 (pygame)
    pygame
    pyinstaller打包python应用程序
    内网渗透之信息收集-linux
  • 原文地址:https://www.cnblogs.com/chuiyuan/p/4338297.html
Copyright © 2011-2022 走看看