算法与数据结构之折半查找(C语言)

 1 #include <stdio.h>
 2 #include<stdlib.h>
 3 
 4 int binsearch(int x,int v[],int n);//函数声明
 5 
 6 int main()
 7 {
 8     int arr[]={1,2,3,4,5,6,7,8,9,10};
 9     int 结果,num;
10     num=7;
11     结果=binsearch(num,arr,10);
12     
13     if(结果<0)
14         printf("没找到!\n");
15     else
16         printf("在arr[%d]找到%d\n",结果,num);
17         system("pause");
18 
19     return 0;
20 }
21 
22 int binsearch(int x,int v[],int n)//函数定义
23 {
24     int low,high,mid;//最小,最大,中间
25 
26     low=0;
27     high=n-1;
28 
29     while(low<=high){//不停折半
30     
31     mid=(low+high)/2;
32     if(x<v[mid]) //如果要找的数比中间的小
33         high=mid-1;//扔掉一半
34     else if(x>v[mid])//如果比中间的大
35         low=mid+1;//扔掉另一半
36     else
37         return mid;//找到
38     
39     
40     }
41 
42     return -1;//没找到
43 }

 

转载于:https://www.cnblogs.com/haciont/p/4803927.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
折半查找算法(Binary Search),也称为二分查找,是一种在有序数组中查找特定元素的搜索算法。其基本思想是将数组按照一定的规则分成两部分,判断待查找元素与数组中间元素的大小关系,从而确定待查找元素在哪一部分,然后继续在该部分中进行查找,直到找到目标元素或查找失败为止。 以下是一个使用C语言实现折半查找算法的示例代码: ```c #include <stdio.h> int binarySearch(int arr[], int low, int high, int target) { while (low <= high) { int mid = low + (high - low) / 2; if (arr[mid] == target) { return mid; } else if (arr[mid] < target) { low = mid + 1; } else { high = mid - 1; } } return -1; } int main() { int arr[] = {2, 4, 6, 8, 10, 12, 14, 16}; int n = sizeof(arr) / sizeof(arr[0]); int target = 10; int index = binarySearch(arr, 0, n - 1, target); if (index != -1) { printf("Target found at index %d\n", index); } else { printf("Target not found in the array\n"); } return 0; } ``` 在上面的代码中,`binarySearch` 函数接受一个有序数组 `arr`、数组的下界 `low`、上界 `high` 和待查找的目标元素 `target`,返回目标元素在数组中的下标,如果目标元素不存在则返回 `-1`。在 `binarySearch` 函数中,首先计算出中间元素的下标 `mid`,然后判断中间元素和目标元素的大小关系,如果相等则返回中间元素的下标,如果中间元素小于目标元素,则在右半部分继续查找,否则在左半部分继续查找,直到找到目标元素或查找失败为止。 在 `main` 函数中,我们定义了一个有序数组 `arr`,并调用 `binarySearch` 函数在数组中查找目标元素 `10`,并输出查找结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值