jingmingblog@博客园

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
        折半插入排序的基本思想是:设在顺序表中有一个对象序列V[0],V[1],…,V[n-1]。其中,V[0],V[1],…,V[i-1]是已经排好序的对象。在插入V[i],利用折半查找法寻找V[i]的插入位置。

 1template<class Type> 
 2void BinaryInsertSort(datalist<Type> &list){
 3    for(int i=1;i<list.CurrentSize;i++) BinaryInsert(list,i);
 4}
;
 5
 6template<class Type> 
 7void BinaryInsert(datalist<Type> &list){
 8//利用折半查找,按list.Vector[i].key在list.Vector[0]到list.Vector[i-1]中
 9//查找list.Vector[i]应插入的位置,再空出这个位置进行插入。
10    int left=0,right=i-1;
11    Element<Type> temp = list.Vector[i];
12    while(left<=right){//利用折半查找插入位置
13        int middle = (left+right)/2;//取中点
14        if(temp.getKey()<list.Vector[middle].getKey())//插入值小于中点值
15            right = middle - 1;//向左缩小区间
16        else left = middle + 1;//否则,向右缩小区间
17    }

18
19    for(int k=i-1;k>=left;k--) list.Vector[k+1]=list.Vector[k];//成块移动空出插入位置
20    list.Vector[left]=temp;//插入
21}
;

折半插入排序源码
posted on 2006-08-18 20:42  jingming  阅读(1668)  评论(0编辑  收藏  举报