1、顺序查找的查找表的数据结构
typedef struct{Elemtype *elem;int TableLen; //表的长度 }SeqList;
2、顺序查找的主要代码
//一般线性表的顺序查找int Search_Seq(SSTable ST,ElemType key){ST.elem[0]=key; //0号元素放关键字,哨兵for(int i=ST.TableLen;ST.elem[i]!=key;i--){return i;} }
其时间复杂度为O(n);其对于顺序表和链表都适用。
3、折半查找的查找表的数据结构
typedef struct{Elemtype *elem;int TableLen; //表的长度 }SSTable;
4、折半查找的主要代码(对于升序的顺序表)
//折半查找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)//在右半边查找 {low=mid+1;} else //在左半边查找 high=mid-1;}return -1;}
其时间复杂度为O(logn);但是其只能对于有序的顺序表,因为链表不具备随机存储的特性。折半查找的过程是一棵平衡二叉树。
如果当前Low和high之间的元素个数是奇数个,则左右两边元素个数相等,否则就是左半部分比右半部分少一个元素(针对于mid=(low+high)/2,也即是向下取整时,若向上取整,则相反)。