顺序查找:
int Sequential_Search(int *a, int n, int key)
{
int i;
for (i = 1; i <= n; i++)
{
if (a[i] == key)
return i;
}
return 0;
}
带哨兵的顺序查找:
int Sequential_Search2(int *a, int n, int key)
{
int i;
a[0] = key; // 设置 a[0] 为关键字值,我们称之为“哨兵”。
i = n; // 循环从数组尾部开始
while (a[i] != key)
{
i--;
}
return i; // 返回 0 则说明查找失败
}
折半查找:
int Binary_Search(int *a, int n, int ket)
{
int low, high, mid;
low = 1;
high = n;
while (low <= high)
{
mid = (low + high) / 2; // 折半
if (a[mid] > key)
high = mid - 1;
else if (a[mid] < key)
low = mid + 1;
else
return mid; // 若相等,则说明 mid 即为查找到的位置
}
return 0;
}