zoukankan      html  css  js  c++  java
  • 顺序查找和二分查找

    1.使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组[转]

    2.顺序查找

    <?php
    //$n为待查找的数组元素的个数,$k为待查找的元素
    function seq_sch($array, $n, $k)
    {
    $array[$n] = $k;
    for($i=0; $i<$n; $i++)
    {
    if($array[$i]==$k)
    {
    return true;
    break;
    }
    }
    if ($i<$n) //判断是否到数组的末尾
    {
    return $i;
    }
    else
    {
    return false;
    }
    }
    $array = array(3, 6, 1, 9, 2, 10);
    $n = count($array);
    $k = 8;
    if(seq_sch($array, $n, $k))
    {
    echo "顺序查找成功";
    }
    else
    {
    echo "顺序查找失败";
    }
    ?>

    顺序查找是在一个已知无序队列中找出与给定关键字相同的数的具体位置。原理是让关键字与队列中的数从第一个开始逐个比较,直到找出与给定关键字相同的数为止。

    3.二分查找

    <?php
    //$low为待查找的数组中的最小值,$high为数组中的最大值,$k为要查找的关键字
    function bin_sch($array, $low, $high, $k)
    {
    if ($low <= $high)
    {
    $mid = intval(($low+$high)/2);
    if ($array[$mid] == $k)
    {
    return true;
    }
    elseif ($k < $array[$mid])
    {
    return bin_sch($array, $low, $mid-1, $k);
    }
    else
    {
    return bin_sch($array, $mid+1, $high, $k);
    }
    }
    return false;
    }
    $array = array(1, 2, 4, 6, 8);
    $low = min(1, 2, 4, 6, 8);
    $high = max(1, 2, 4, 6, 8);
    $k = 8;
    if(bin_sch($array, $low, $high, $k))
    {
    echo "二分查找成功";
    }
    else{
    echo "二分查找失败";
    }
    ?>

    【二分查找要求】:1.必须采用顺序存储结构 2.必须按关键字大小有序排列。
    【算法过程】首先,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。
    重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

    实例:

    1, 2, 4, 6, 8
    假设要查找的关键字为2。
    首先找出该数值中中间位置的数,即4,与关键字2比较,两数不等,则将数组以中间位置关键字4为分界点分为前后两个字表,即
    {1 2}和{6 8}
    中间位置关键字4大于要查找的关键字2,所以查前一个子表{1 2},该字表中有2,查找成功。

  • 相关阅读:
    Zabbix监控mysql配置及故障告警配置
    Tesseract-OCR 字符识别---样本训练
    Wex5案例使用JSON传输Thinkphp后端对接,以达成数据正常输出
    Linux内核分析:recv、recvfrom、recvmsg函数实现
    libevent源码分析:evmap_io_active_函数
    libevent源码分析:epoll后端实现
    监听套接字不可写?
    Linux内核分析:dup、dup2的实现
    Linux内核分析:打开文件描述符实现
    libevent源码分析:http-server例子
  • 原文地址:https://www.cnblogs.com/limeng951/p/5621544.html
Copyright © 2011-2022 走看看