一.算法思想
1.二分插入排序的基本思想和插入排序一致;都是将某个元素插入到已经有序的序列的正确的位置;
2.和直接插入排序的最大区别是,元素A[i]的位置的方法不一样;直接插入排序是从A[i-1]往前一个个比较,从而找到正确的位置;而二分插入排序,利用前i-1个元素已经是有序的特点结合二分查找的特点,找到正确的位置,从而将A[i]插入,并保持新的序列依旧有序;
3.时间复杂度:
T(n) = O(n);
二.代码
1 class BinaryInsertSort{ 2 public static void sort(int[] A) { 3 int len =A.length; 4 int key = 0; 5 int low = high = mid =0; 6 for(int i =0 ;i<len;i++) { 7 key = A[i]; 8 low = 0; 9 high = i-1; 10 while(low<=high){ 11 mid = (high + low)/2; 12 if(key<A[mid]){ 13 high = mid -1; 14 } 15 else{ 16 low = mid+1; 17 } 18 } 19 for(int j = i-1;j>=high+1;j--){ 20 A[j+1] =A[j]; 21 } 22 A[j+1] =key; 23 } 24 } 25 }