写代码可以在整型有序数组中查找想要的数字, 找到了返回下标,找不到返回-1.(折半查找)

问题:在一个整形有序数组中查找想要的数字,找到了返回下标,找不到返回-1。折半查找也叫二分查找。

思路:每次取数组中间位置的数字与待查找数字进行比对,若待查找数字较大则往后继续取中间位置数字比对,较小时则往前比对,直至找到待查找数字。

重点:写一个折半查找的函数BinarySearch(),完成查找过程,并在主函数中进行调用。定义变量left与right,[left,right]构成待查找区间。并初始化left为0,right=sizeof(arr)/ sizeof(arr[0])-1,即数组长度除以数组首元素长度再减一。但数组作为函数参数的时候,会隐式转换成指针,因此不能直接计算出right的值。我们需要借助另一个变量size,在主函数中先计算size=sizeof(arr)/ sizeof(arr[0]),再在函数中直接调用size,这样就可以通过size-1来计算right的值了。
实现代码:

#include<stdio.h>
#include<stdlib.h>
int BinarySearch(int arr[], int size, int to_find) {
 int left = 0;
 int right = size - 1;
 while (left <= right) {
  int mid = (left + right) / 2;
  if (to_find < arr[mid]) {
   right = mid - 1;//若被查找数小于中间下标的数,则在前半部分继续查找
                   //且下标为mid的数不必再查找
  }
  else if (to_find > arr[mid]) {
   left = mid + 1;
  }
  else {
   printf("%d\n", mid);//若找到,返回该数的下标
   return mid;
  }
 }
 printf("-1\n");
 return 0;
}
int main() {
 int arr[6] = { 1,2,3,4,5,6 };
 int size = sizeof(arr) / sizeof(arr[0]);
 int ret = BinarySearch(arr, size, 5);
 system("pause");
 return 0;
}

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/swag_wg/article/details/88816025
今日推荐