顺序查找
#include <iostream>
#define LIST_SIZE 20
#define KeyType int
#define OtherType int
#define KeyType int
typedef struct
{
KeyType key;
OtherType other-data;
} RecordType;
typedef struct
{
RecordType r[LIST_SIZE+1];
int length;
} RecordList;
int SeqSearch (RecordList l, KeyType k) //顺式结构查找
{
int i=l.length;
while (i>=1&&l.r[i].key!=k) i--;
if (i>=1) return(i)
else return (0);
}
int SeqSearch (RecordList l, KeyType k) //顺式结构查找 优化
{
L.r[0].key=k; //设置监视哨
int i=L.length;
while (L.r[i].key!=k) i--;
return(i);
} //性能分析 ASL= (n+1)/2 ;列表长度为n
int BinSrch (SqList L, KeyType k) //二分查找
{ low=1 ; high=L.length;
while ( low<=high)
{ mid=(low+high) / 2;
if (k==L.r[mid].key)
return(mid);
else if (k<L.r[mid]. key)
high=mid-1;
else
low=mid+1;
}
return 0;
}
二分查找,判定树
数字1-11的判定树
二叉排序树:
例:已知长度为12的表:(Jan,Feb,Mar,Apr,May,June,July,Aug,Sep,Oct,Nov,Dec)。
1)试按表中元素的顺序依次插入一棵初始为空的二叉排序树,画出插入完成后的二叉排序树并求其等概率的情况下查找成功的平均查找长度。
2)若对表中元素先进行排序构成有序表,求其等概率的情况下对此有序表进行折半查找成功的平均查找长度。