• 二分查找/折半查找


    二分查找又叫折半查找。

    前提:数组是有序的。

    思想: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 }
  • 相关阅读:
    Python基础之基本数据类型
    Python基础之变量
    mysql数据库
    进程与线程
    并发编程
    网络编程
    内置函数(魔法方法)
    组合,封装,访问限制机制,property装饰器
    面向对象之继承
    Web开发中最致命的8个小错误
  • 原文地址:https://www.cnblogs.com/panda1024/p/6031902.html
Copyright © 2020-2023  润新知