1、二分查找
int Binary_Search(SeqList L,ElemType key){
int low=0,high=L.TableLen-1,mid;
while(low<=high){
mid=(low+high)/2;
if(L.elem[mid]==key)
return mid;
else if(L.elem[mid]>key)
high=mid-1;
else
low=mid+1;
}
return -1;
}
3、BST(二叉排序树)
(1)查找
BSTNode *BST_Search(BiTree T,ElemType key){
while(T!=NULL && key!=T->data){ //若树空或等于跟结点值,则结束循环
if(key<T->data) //小于,则在左子树上查找
T=T->lchild;
else //大于,则在右子树上查找
T=T->rchild;
}
return T;
}
(2)插入
BSTNode BST_Insert(BiTree &T,keyType k){
if(T==NULL ){ //原树为空,新插入结点为根结点
T=(BiTree)malloc(sizeof(BSTNode));
T->key=k;
T->lchild=T->rchild=NULL;
return 1; //返回1,插入成功
}
else if(k=T->key) //树中有相同关键字结点,插入失败
return 0;
else if(k<T->key) //插入到左子树
return BST_Insert(T->lchild,k);
else //插入到右子树
return BST_Insert(T->rchild,k);
}
4、堆
void HeadAdjust(ElemType A[],int k,int len){
//函数 HeadAdjust 将元素k为根的子树进行调整
A[0]=A[K]; //A[0]暂存子树的根结点
for(i=2*k;i<=len;i*=2){ //沿 key较大的子结点向下筛选
if(i<len && A[i]<A[i+1])
i++; //取key较大的子结点的下标
if(A[0]>=A[i]) break; //筛选结束
else{
A[k]=A[i]; //将A[i]调整到双亲结点上
k=i; //修改k值,以便继续向下筛选
}
}
A[k]=A[0]; //被筛选结点的值放入最终位置
}