折半查找或二分查找
算法思想
设计一个左指针从小标0开始,设计一个右指针从最后一个元素的下标开始,当left大于right时循环停止。优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难,具体情况,直接上代码。
代码实现
#include <stdio.h>
#include <time.h>
int main()
{
int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
srand(time(0));
int x = rand() % 10;
int left = 0;
int right = 9;
int mid;
printf("%d\n", x);
while (left <= right)
{
mid = (left + right) / 2;
if (a[mid] == x)
{
printf("找到了 %d", mid);
return mid;
}
else if (a[mid] > x)
{
right = mid - 1;
}
else
{
left = mid + 1;
}
}
printf("找不到");
return 0;
}