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

      

  • 相关阅读:
    04、Unity_声音管理器
    StreamingAssets文件夹的读取异常
    Unity做360度的全景照片
    07.C#中如何排除/过滤/清空/删除掉字符串数组中的空字符串
    03、三种简单的计时器
    02、在层级未知情况下通过递归查找子物体
    Java中请优先使用try-with-resources而非try-finally
    Redis——入门学习笔记
    KafKa——学习笔记
    SpringBoot——学习笔记
  • 原文地址:https://www.cnblogs.com/Gabby/p/6526398.html
Copyright © 2011-2022 走看看