一.算法思想
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 }