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

      

  • 相关阅读:
    leetcode 673. 最长递增子序列的个数 java
    leetcode 148. 排序链表 java
    leetcode 98. 验证二叉搜索树 java
    leetcode 29. 两数相除 java
    leetcode 234. 回文链表 java
    Valid Palindrome LeetCode Java
    Single Number II LeetCode Java
    Single Number LeetCode java
    Search in Rotated Sorted Array II LeetCode Java
    Search in Rotated Sorted Array leetcode java
  • 原文地址:https://www.cnblogs.com/Gabby/p/6526398.html
Copyright © 2011-2022 走看看