当前位置:   article > 正文

C语言实现——二分查找_c语言数据结构实验报告二分查找

c语言数据结构实验报告二分查找

一、二分查找介绍

二分查找(Binary Search)是一种在有序数组中查找特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是目标值,则搜索过程结束;如果目标值大于或小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且每次比较都使搜索范围缩小一半。

二、两种方法及思路

二分查找的思路非常简单,在一个有序数组里面查找一个元素,通过一个中间值,将元素分为两半,如果中间值不是想要查找的元素,就和查找的元素比较,如果查找的元素大于中间值,就在数组的后半部分查找。如果查找的元素小于中间值,就在数组的后半部分查找。每次查找都会使查找的范围缩小一半。
主要难点就是如何确定二分查找的边界,这里给出了两种方法,一种方法是left<=right,相当于是左闭右闭区间,其中的每一个元素都要使用到。另一种方法是left<right,相当于是左闭右开区间,其中right是边界,不能取元素比较。

三、代码实现

  1. #define _CRT_SECURE_NO_WARNINGS 1
  2. #include <stdio.h>
  3. int BinarySearch1(int* arr, int len, int x) {
  4. int left = 0, right = len - 1;
  5. while (left <= right)
  6. {
  7. int mid = left + (right-left) / 2; // 防止数组过大造成整数越界
  8. if (arr[mid] == x) {
  9. return mid; // 找到了目标值
  10. }
  11. else if (arr[mid] > x) {
  12. right = mid - 1;
  13. }
  14. else{
  15. left = mid + 1;
  16. }
  17. }
  18. return -1; // 未找到目标值
  19. }
  20. int BinarySearch2(int* arr, int len, int x) {
  21. int left = 0, right = len;
  22. while (left < right)
  23. {
  24. int mid = left + (right - left) / 2;
  25. if (arr[mid] == x) {
  26. return mid; // 找到的目标值
  27. }
  28. else if (arr[mid] > x) {
  29. right = mid - 1;
  30. }
  31. else {
  32. left = mid + 1;
  33. }
  34. }
  35. return 0; // 未找到目标值
  36. }
  37. int main() {
  38. int arr[] = { 0,1,2,3,4,5,6,7,8,9 };
  39. int index = -1;
  40. index = BinarySearch1(arr, 10, 3);
  41. printf("%d\n", index);
  42. index = BinarySearch2(arr, 10, 6);
  43. printf("%d\n", index);
  44. return 0;
  45. }

四、运行结果

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/807572
推荐阅读
相关标签
  

闽ICP备14008679号