zoukankan      html  css  js  c++  java
  • 折半查找算法实现

         折半查找是一种比较高效的查找方式,其基本思想是:在某个有序表中,取出中间的记录作为比较对象,如果要查找记录的关键码等于中间记录的关键码,则查找成功;若要查找记录的关键码小于中间记录的关键码,则在中间记录的左半区继续查找;若查找记录的关键码大于中间记录的关键码,则在中间记录的右半区继续查找。不断重复上述查找过程,直到查找成功,或有序表没有所要查找的记录,查找失败。实现过程有两种方式递归法和非递归法。

          1.非递归法:查找成功则返回位置,查找失败则范围-1.

          /////////////////////////////////////////////////
         //非递归查找1. numVec为待查找的集合2.x为待查找数值 3.beg为查找范围起始 4.last为查找范围结束
        /////////////////////////////////////////////////
    int Bisearch::BiSearch(vector<int> numVec,int x,int beg,int last){
             int mid;//中间位置
             if(beg>last){ //beg开始位置大于last结束位置,目前只考虑升序状态下
             return -1;
             }  
             while(beg<=last){
                   mid =(beg+last)/2; 
                   if(x==numVec[mid]){//x(关键码)刚好跟中间值(numVec[mid])相同
                   return mid;
             }else if(x>numVec[mid]){//x(关键码)大于中间值(numVec[mid]),起点定位到mid+1
                   beg = mid +1;
              }else if(x<numVec[mid]){//x(关键码)小于于中间值(numVec[mid]),终点定位到mid-1
                   last = mid -1;
             }
          }
             return -1;
    }

               2.递归法:

              int Bisearch::IterBiSearch(vector<int> numVec,int x,int beg,int last){
           //中间位置初始化为-1
           int mid =-1;
           mid = (beg+ last)/2;
           if(x==numVec[mid]){
            return mid;
           }else if(x<numVec[mid]){
                 return IterBiSearch(numVec,x,beg,mid-1);
           }else if(x>numVec[mid]){
                  return IterBiSearch(numVec,x,mid+1,last);
     }
         return -1;
    }

  • 相关阅读:
    如何查看微信公众号的历史文章(微信订阅号查看历史消息)
    微信服务号有福啦 每月可以微信群发4次
    欲提高微信图文转化率 需学点如何吊胃口
    只需按一下空格键就可以标注 不用众里寻他千百度
    如何让你的微信图文转化率达到300%
    是智能手机推动windows xp系统停止服务吗
    响应式js幻灯片代码一枚
    微信公众平台回复链接可以直接访问,但不能是锚文字链接<a>标签
    如何用腾讯电脑管家备份微信聊天记录
    android版微信5.2.1更新 支持微信聊天记录备份到电脑上
  • 原文地址:https://www.cnblogs.com/345717675GISER/p/4136008.html
Copyright © 2011-2022 走看看