zoukankan      html  css  js  c++  java
  • 数据结构之排序算法Java实现(6)—— 插入类排序之折半插入排序算法

    折半插入排序是对直接插入排序进行了改进,在寻找插入点时使用二分查找算法,提高了查询效率。

    升序排序:

    /**
    	 * 折半插入排序
    	 * 升序排序
    	 */
    	@Override
    	public <T extends Comparable<? super T>> void sortByAsc(T[] data) {
    		
    		for(int i = 1;i < data.length;i++ ){
    			if(data[i].compareTo(data[i - 1]) < 0){
    				/**记录i的值*/
    				T temp = data[i];
    				/**记录搜索范围的左边界*/
    				int low = 0;
    				/**记录搜索范围的右边界*/
    				int high = i - 1;
    				while(low <= high){
    					/**记录中间位置*/
    					int mid = (high + low)/2;
    					/**比较中间位置数据和i处数据大小,以缩小搜索范围*/
    					if(data[mid].compareTo(temp) < 0){
    						low = mid + 1;
    					}else{
    						high = mid - 1;
    					}
    				}
    				/**移动low~i处数据整体向后移动*/
    				for(int j = i; j > low; j--){
    					data[j] = data[j - 1];
    				}
    				data[low] = temp;
    			}
    		}
    	}
    

      降序排序:

    	/**
    	 * 折半插入排序
    	 * 降序排序
    	 */
    	@Override
    	public <T extends Comparable<? super T>> void sortByDesc(T[] data) {
    		for(int i = 1;i < data.length;i++ ){
    
    			if(data[i].compareTo(data[i - 1]) > 0){
    				/**记录i的值*/
    				T temp = data[i];
    				/**记录搜索范围的左边界*/
    				int low = 0;
    				/**记录搜索范围的右边界*/
    				int high = i - 1;
    				while(low <= high){
    					/**记录中间位置*/
    					int mid = (high + low)/2;
    					/**比较中间位置数据和i处数据大小,以缩小搜索范围*/
    					if(data[mid].compareTo(temp) > 0){
    						low = mid + 1;
    					}else{
    						high = mid - 1;
    					}
    				}
    				/**移动low~i处数据整体向后移动*/
    				for(int j = i; j > low; j--){
    					data[j] = data[j - 1];
    				}
    				data[low] = temp;
    			}
    		}
    
    	}
    

      

  • 相关阅读:
    java过滤器 Fliter
    input标签name、value与id属性
    python 简单的数据库操作之转账
    正则表达式基本语法
    适合新手的Python爬虫小程序
    如何使用EditPlus将json格式字符串默认为UTF-8格式
    codeforces 527C:STL set
    codeforces 527B:瞎搞
    HDU 3397 线段树
    HDU 3436:splay tree
  • 原文地址:https://www.cnblogs.com/Gabby/p/6526398.html
Copyright © 2011-2022 走看看