二分查找/折半查找

Posted 小课桌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分查找/折半查找相关的知识,希望对你有一定的参考价值。

二分查找又叫折半查找。

前提:数组是有序的。

思想: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 }

 

以上是关于二分查找/折半查找的主要内容,如果未能解决你的问题,请参考以下文章

C语言二分查找算法,折半查找算法

二分查找(折半查找)

python实现二分查找(折半查找)算法

折半查找(二分查找)

二分查找(折半查找)

二分查找(折半查找)算法详解(C语言实现)