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;
    			}
    		}
    
    	}
    

      

  • 相关阅读:
    lombok 下的@Builder注解用法
    (springboot)自定义Starter
    各种 Spring-Boot-Starters系列 介绍
    MQ的使用场景
    SpringBoot中使用rabbitmq,activemq消息队列和rest服务的调用
    RPC原理详解
    Java性能优化的50个细节
    thinkphp3.2.2有预览的多图上传
    关于php中的exec命令
    关于thinkphp3.1无法加载模块解决办法
  • 原文地址:https://www.cnblogs.com/Gabby/p/6526398.html
Copyright © 2011-2022 走看看