顺序查找
#include <iostream>
typedef struct {//查找表的数据结构(顺序表)
int* elem;//动态数组基址
int TableLen;//表的长度
}SSTable;
//顺序查找
int Search_Seq1(SSTable ST, int key) {
int i;
for (i = 0; i < ST.TableLen && ST.elem[i] != key; ++i)
//查找成功,则返回元素下标;查找失败,则返回-1
return i == ST.TableLen ? -1: i;
}
//顺序查找(哨兵)
int Search_Seq2(SSTable ST, int key) {
ST.elem[0] = key;//"哨兵"
int i;
for (i = 0; i < ST.TableLen && ST.elem[i] != key; ++i)
//查找成功,则返回元素下标;查找失败,则返回-1
return i == ST.TableLen ? -1 : i;
}
折半查找
//折半查找
int Binary_Search(SSTable L, int 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;//查找失败,返回-1
}
分块查找
//索引表(分块查找)
typedef struct {
int maxValue;
int low, high;
}Index;