- typedef struct{
- Elemtype *elem;
- int TableLen; //表的长度
- }SeqList;
- //一般线性表的顺序查找
- 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);其对于顺序表和链表都适用。
- typedef struct{
- Elemtype *elem;
- int TableLen; //表的长度
- }SSTable;
- //折半查找
- 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,也即是向下取整时,若向上取整,则相反)。