(1)顺序查找
时间复杂度为 O ( n ) O(n) O(n)
#include <stdio.h>
typedef struct LNode *StaticTable;
struct LNode{
ElementType Element[MAXSIZE];
int Length;
};
int SequentialSearch(StaticTable Tbl, ElementType K)
{ // 在表Tbl[1]~Tb1[n]中查找关键字为K的数据元素
int i;
Tbl->Element[0] = K; // 建立哨兵,用于判断边界条件
for ( i = Tbl->Length; Tb1->Element[i] != K; i-- );
return i; // 查找成功返回所在单元下标;不成功返回0
}
(二)二分查找
时间复杂度 O ( l o g N ) O(logN) O(logN)
#include "binary_search.h"
typedef struct LNode *Tbl;
struct LNode {
ElementType Data[MaxSize];
int Length;
}
int BinarySearch(List Tbl, ElementType K)
{ // 在表Tbl中查找关键字为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 reutn mid; // 查找成功,返回数据元素的下标
}
return NotFound; // 查找不成功,返回-1
}