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

      

  • 相关阅读:
    微信小程序学习心得
    微信小程序分类的实现
    Vue实例中封装api接口的思路 在页面中用async,await调用方法请求
    Vue中封装axios组件实例
    使用creata-react-app脚手架创建react项目时非常慢的问题
    Javascript的对象
    vue中上拉加载数据的实现
    Vue中键盘事件
    vant学习网址
    字符串,字典,数组写入本地文件和从本地文件读取
  • 原文地址:https://www.cnblogs.com/Gabby/p/6526398.html
Copyright © 2011-2022 走看看