数据结构之排序算法Java实现—— 插入类排序之折半插入排序算法
Posted Emma_Zhang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构之排序算法Java实现—— 插入类排序之折半插入排序算法相关的知识,希望对你有一定的参考价值。
折半插入排序是对直接插入排序进行了改进,在寻找插入点时使用二分查找算法,提高了查询效率。
升序排序:
/** * 折半插入排序 * 升序排序 */ @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实现—— 插入类排序之折半插入排序算法的主要内容,如果未能解决你的问题,请参考以下文章