二分查找/折半查找

二分查找又叫折半查找。

前提:数组是有序的。

思想:1、每次都拿中间的数的key进行比较,如果相等,找到;

        2、如果key > 中间数,说明key在中间数的右边,接着拿右边的中间数和key比较;

        3、如果key < 中间数,说明key在中间数的左边,接着拿左边的中间数和key比较;

        4、循环上述过程;

 

啥也不说了,上代码:

 1 #include <stdio.h>
 2 
 3 int main(int argc, const char * argv[]) {
 4     
 5     // 定义数组
 6     int arr[] = {10,45,67,89,90,122,456,789,999};
 7     
 8     // 查找789在这个数组中的下标
 9     int key = 789;
10     
11     int len = sizeof(arr) / sizeof(arr[0]);
12     
13     int minIndex = 0;
14     int maxIndex = len - 1;
15     int middleIndex = len / 2; // 中间数的下标
16     
17     // 判断中间的数是否等于key
18     if(key == arr[middleIndex]){
19         printf("the key's index is %d",middleIndex);
20         return 0;
21     }
22     
23     // 如果不相等就判断大小
24     while (key != arr[middleIndex]) {
25         if(key < arr[middleIndex]){ // 说明key在中间数的左边
26             maxIndex = middleIndex - 1; // 最大下标改为中间数下标的前一个元素的下标
27         }
28         else if(arr[middleIndex < key]){ // 说明key在中间数的右边
29             minIndex = middleIndex + 1; // 最小下标改为中间数下标的后一个元素的下标
30         }
31         else{ // 说明key = arr[middleIndex]
32             printf("the key's index is %d",middleIndex);
33             return 0;
34         }
35         middleIndex = (minIndex + maxIndex) / 2;
36     }
37     
38     printf("没有找到要查找的数");
39     
40     return 0;
41 }

 

转载于:https://www.cnblogs.com/panda1024/p/6031902.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值