zoukankan      html  css  js  c++  java
  • 二分查找/折半查找

    二分查找又叫折半查找。

    前提:数组是有序的。

    思想: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 }
  • 相关阅读:
    MSSQL Join的使用
    MSSQL2008 常用sql语句
    Process使用
    c# 多线程 调用带参数函数
    C# 多线程参数传递
    C# 单例模式代码
    C#调用存储过程
    页面布局
    构建:vue项目配置后端接口服务信息
    浏览器工作原理(二):浏览器渲染过程概述
  • 原文地址:https://www.cnblogs.com/panda1024/p/6031902.html
Copyright © 2011-2022 走看看