今天学习的是二分查找经典算法,虽然思想简单但很容易写错。
#include<stdio.h>
int binary_search(int array[], int n, int value)
{
int left = 0;
int right = n - 1;
while (left <= right) //注意当区间为【0,n-1】时候一定是left<=right
{
int middle = left + ((right - left) >> 1);//移位提高效率,每次中间值要更新千万不能写到循环外边
if (array[middle] < value)//当中间值小于查找值,left下标+1
{
left = middle + 1;
}
else if (array[middle] > value)//当中间值大于查找值,right-1
{
right = middle - 1;
}
else
{
return middle;//返回下标
}
}
return -1;
}
int main()
{
int array[] = { 1,2,3,4,5,6,7,8,9 };
int n = sizeof(array) / sizeof(array[0]);
int value = 7;
printf("下标为:%d\n", binary_search(array, n, value));
return 0;
}