zoukankan      html  css  js  c++  java
  • 折半查找算法及分析(手工过程)

    折半查找的手工过程:

    1.我需要查找的数是10;

    给定:1  5  8  10  13 14  17  22  25  27  29  31  35  37  40  42  45  47  50  51  58

    下标:0  1  2   3   4    5    6    7     8    9   10  11  12  13  14  15  16  17  18  19  20

       h               m                  t

       h    m          t

       h m  t

         h   t

         m  h

           m

    这个手工过程到head = tail 时找到了。

    我需要查找的数是29;

    给定:1  5  8  10  13 14  17  22  25  27  29  31  35  37  40  42  45  47  50  51  58

    下标:0  1  2   3   4    5    6    7     8    9   10  11  12  13  14  15  16  17  18  19  20

       h               m                  t

    这个手工过程数在head < tail时程序停止,找到的是下标的那个数。

    代码如下:

    #include<stdio.h>
    #include<stdlib.h>
    int binarySearch(int *arr,int count ,int data){
        int middle;
        int head = 0;
        int tail;
        tail =  count;
        while(arr[middle] != data){
            middle = (head + tail)/ 2;
            
            if(arr[middle] < data){
                head = middle + 1;
            }else if(arr[middle] > data){
                tail = middle - 1;
            }
        }    
        return middle;
        return -1;
    }
    int main(){
        int n = 0;
        int m ;
        int a[10]={1,4,8,9,16,17,19,20,25,27};
        printf("请输入需要查找的数: ");
        scanf("%d",&n);
        m = binarySearch(a,10,n);
        printf("%d ",m);
        return 0;
    }
     

    这是一个简单的折半处理,用的是一个简单的数组

    需要强调的是:

          如果要运用折半算法,数必须是有序的(升序或者降序)

          很多人都认为while(head > tail)这样也是正确的,但是对于middle = data时条件一直成立就会出现问题的!

  • 相关阅读:
    渗透测试靶场
    Ubuntu kylin优麒麟下配置Hadoop环境
    虚拟机win+IIs+asp+access搭建网站过程
    百度增强搜索
    渗透入门——术语概述
    api如何获取cookie
    还在纠结接口文档的事儿呢?
    为什么需要API管理平台
    自动生成接口文档的三种方式
    轻量化API测试工具整理
  • 原文地址:https://www.cnblogs.com/youdiaodaxue16/p/9016337.html
Copyright © 2011-2022 走看看