实现二分查找

来源:互联网 发布:linux的w命令 编辑:程序博客网 时间:2024/06/02 21:14

     所谓的二分查找就是用目标值先和有序数组中中间元素进行比较,如果目标值小于有序数组元素中间值,就接着访问左边数组元素,和左边数组中间元素比较;如果目标值大于有序数组元素中间值,就接着访问右边数组元素,和右边数组中间元素比较……
二分查找代码如下:

#include <stdio.h> int Binary_key(int arr[], int key, int left, int right) {  int mid = 0;  while (left <= right)  {   mid = left + ((right - left) >> 1);   if (key < arr[mid])   {    right = mid - 1;   }   else if (key > arr[mid])   {    left = mid + 1;   }   else   {    return mid;   }  }  return -1; } int main() {  int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };  int key = 3;  int left = 0;  int right = sizeof(arr) / sizeof(arr[0]) - 1;  int tmp = Binary_key(arr, key, 1, 8);  if (tmp == -1)  {   printf("没找到\n");  }  else  {   printf("已找到\n");  } }

上述mid的求法等价于mid=left+((right-left)/2),之所以不用传统的(left+right)/2是为了防止溢出;
sizeof(arr)/sizeof(arr[0])求数组的长度; 
while(left<=right),left必须是小于等于right,否则判断条件不全面。

原创粉丝点击