折半查找(又称二分查找)
简单的理解就是整形有序的数组中,在查找过程中把要查找的与数组最中间的数进行比较以次循环进行查找,找到了返回下标,找不到返回 - 1。
#include < stdio.h >
#include < stdlib.h>
//折半查找函数
int binary_search(int arr[], int key, int line)
//确定的数组长度需要以传参的形式传给函数,数组的长度不能在函数内部进行计算,
//数组传参过程是以指针形式进行传址的
{
int left = 0;
int right = line - 1;
while (left <= right)
{
int mid = left + (right - left) / 2;//数组的中间值
if (arr[mid] == key)
{
return mid;//找到了,返回下标
}
else if (arr[mid] > key)
{
right = mid - 1;
}
else
{
left = mid + 1;
}
}
if (left > right)
return -1;//找不到返回-1
}
int main()
{
int arr[10] = { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 };
int key = 100;//要查找的数
int line = sizeof (arr) / sizeof(arr[0]);//确定数组长度
int ret = binary_search(arr, key, line); //折半查找函数
if (ret == -1)
{
printf("找不到\n");
}
else
{
printf("找到了:%d\n", ret);
}
system("pause");
return 0;
}
程序输出结果: