折半插入排序
来源:互联网 发布:阿里云在阿里巴巴 编辑:程序博客网 时间:2024/06/08 02:41
思想
直接插入排序其插入位置是在部分排序数组的后面开始判断找到插入位置,而折半插入排序是利用二分查找的方式找到插入位置
算法
package alg.sort;public class BinInsertSort { public void sort(int[] A){ int n = A.length; for(int i=1;i<n;i++){ int left = 0; int right = i-1; int x = A[i]; int id = binaryId(A,left,right,x);// 二分查找找到对应的插入位置 for(int j=right;j>=id;j--){ // 移动元素 A[j+1] = A[j]; } A[id] = x; } } // 二分查找找到对应的插入位置 public int binaryId(int[] A,int left,int right,int x){ if(left>=right) return left; while(left<= right){ int mid = left + (right - left)/2; if(A[mid]==x) return mid; else if(A[mid]<x) left = mid + 1; else right = mid - 1; } return left; } public static void main(String[] args){ int[] A = new int[]{49,38,65,97,76,13,27,49}; PrintArray.printArray(A); BinInsertSort binInsertSort = new BinInsertSort(); binInsertSort.sort(A); PrintArray.printArray(A); }}
复杂度分析
(1)时间复杂度
对于折半查找时间复杂度
移动元素时间复杂度
最好情况:不需要移动元素,但是查找的时间还是
最坏情况:需要移动元素,时间复杂度
平均时间复杂度
(2)空间复杂度
只用到常量的变量,空间复杂度
0 0
- 插入排序--折半插入
- 插入排序--折半插入
- 排序:折半插入排序
- 排序--折半插入排序
- 排序-折半插入排序
- 【插入排序】折半插入排序
- 插入排序--折半插入排序
- 折半插入排序,插入排序
- 折半插入排序
- 折半插入排序
- 折半插入排序算法
- 折半插入排序算法
- 折半插入排序 练习
- 折半插入排序
- 折半插入排序
- 折半插入排序
- 折半插入排序 Java
- 折半插入排序算法
- PropertyAnimator-keyFrame 参数说明
- 驱动开发中使用安全字符串函数
- Tomcat7.0源码分析——请求原理分析
- Java原子类
- matalb Reshape 函数
- 折半插入排序
- 简单的使用uflo的在线设计
- HTTP协议报文格式
- Nodejs开发框架Express3.0
- AnnotationAwareAspectJAutoProxyCreator is only available on Java 1.5 and higher
- Android Camera 关闭人脸美化功能
- Linux内核Input输入子系统浅解
- Linux下安装LoadRunner LoadGenerator
- bzoj1303(很好的数学题,考智商啊)