查找
1. 静态查找
2. 动态查找
查找
1.顺序查找(利用哨兵)
时间复杂度 O(N)
//在表Tbl(数组)中寻找关键字为K的数据元素
int SequentialSearch(StaticTable *Tbl, ElementType K){
int i;
Tbl->Element[0] = K; //数组的第一个元素作为哨兵
for(i = Tbl->Length; Tbl->Element[i]!=K; i--)
return i; //如果没有找到,则返回0
}
2.二分查找
时间复杂度 O(log N)
//在表Tbl(数组)中寻找关键字为K的数据元素
//在这段程序中,第一个元素置空,有效元素下标从1开始,且数据已经从小到大排列完毕
int BinarySearch(StaticTable *Tbl, Element K){
int left, right, mid, NotFound = -1;
left = 1;
right = Tbl->Length;
while(left<=right) //区域内还存在数据
{
mid = (left + right) / 2;
if(K < Tbl->Element[mid])
right = mid - 1;
else if(K > Tbl->Element[mid])
left = mid + 1;
else
return mid;
}
return NotFound;
}