顺序查找(线性查找)
主要用于在线性表中的查找
int Search1(int a[],int n,int key){ for(int i=1;i<=n;i++){ //注意从1开始 if(a[i]==key)return i; //查找成功 } return 0; //查找失败 }
int Search2(int a[],int n,int key){ int i=n; a[0]=key; //设置“哨兵” while(a[i]==key){ //若不是找的元素 i--; //从前往后查找 } return i; //查找失败也返回0 }
折半查找
仅适用于有序的顺序表
算法思路:首先将给定值key与表中中间位置的元素的关键字比较,若相等,则查找成功,返回该元素的存储位置;若不等,则所需查找的元素只能在中间的元素以外的前半部分或后半部分中。然后在缩小的范围内继续进行同样的查找,如此重复知道找到为止,或者确定表中元素无所需的查找元素,则失效,返回失败信息。
分块查找(索引顺序查找)
1.确定待查找值在哪个块(折半查找)
2.在确定的块中查找待查找值(顺序查找)
二叉排序树(Binary Search Tree 二叉搜索树)
或是一棵空树,或是具有以下性质的二叉树
1.若左子树不空,则左子树上所有结点值均小于其根结点的值
2.若右子树不空,则右子树上所有结点值均小于其根结点的值
3.左右子树也是一棵二叉排序树
二叉排序树的目的不是为了排序,是为了提高查找(有序)和插入删除(树型结构)关键字的速度。
typedef struct BiTNode{ //二叉排序树结点结构 int data; //结点数据 struct BiTNode *lchild,*rchild; //指向该结点左右孩子的指针 }BiTNode,*BiTree
一.二叉排序树查找关键字代码
递归代码:
BiTNode *BST_Search(BiTNode *t,ElemType key){ if(t==NULL)return NULL; //若树为空则为空值 else{ if(t->key==key)return t; else if(key<t->key)return BST_Search(t->lchild,key); else if(key>t->key)return BST_Search(t->rchild,key); } }
非递归代码
BiTNode *BST_Search(BiTNode *t,ElemType key){
BitNode *p=t;
原文:https://www.cnblogs.com/suprechen/p/10618446.html