二分搜索:
一种效率较高的搜索算法,但要求要排序的数组必须是有序的。
核心思想:
每次都从中间查找,若找到的值大于中间值,则往后找(原数组为升序数组),不然往前查找。
图片演示:
代码实现:
#include <stdio.h>
int search(int arr[], int k, int sz)
{
//算法实现
int left=0;
int right=sz-1;
while(left<=right)
{
int mid=(left+right)/2; //中间元素下标
if(arr[mid] <k)
{
left=mid+1;
}
else if(arr[mid] >k)
{
right=mid-1;
}
else
{
return mid;
}
}
return -1;
}
int main()
{
//二分查找
//在一个有序数组中查找具体的某个数
//如果找到了返回,这个数的下标,找不到的返回-1
int arr[]={2,4,7,11,13,16,21,24,27,32,36,40,46};
int k=36;
int sz=sizeof(arr)/sizeof(arr[0]);
int ret=search(arr, k, sz);
if(ret == -1)
{
printf("找不到指定数字\n");
}
else
{
printf("找到了,下标是: %d\n ", ret);
}
return 0;
}