排序算法二:二分插入排序

一.算法思想

  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 }            

 

posted @ 2015-03-09 14:47  北极星之光  阅读(7818)  评论(0编辑  收藏  举报