zoukankan      html  css  js  c++  java
  • 实现有序表二分查找

    二分查找递归与非递归

    //算法7.3 折半查找
    
    
    
    #include<iostream>
    using namespace std;
    #define MAXSIZE 100
    #define OK 1;
    
    typedef struct{
        int key;//关键字域
    }ElemType;
    
    typedef struct{
        ElemType *R;
        int length;
    }SSTable;
    
    int InitList_SSTable(SSTable &L)
    {
        L.R=new ElemType[MAXSIZE];
        if (!L.R)
        {
            cout<<"初始化错误";
            return 0;
        }
        L.length=0;
        return OK;
    }
    
    int Insert_SSTable(SSTable &L) 
    {
        int j=1;
        for(int i=1;i<MAXSIZE;i++)
        {
            L.R[i].key=j;
            L.length++;
            j++;
        }
        return 1;
    }
    
    int Search_Bin(SSTable ST,int key) {
       // 在有序表ST中折半查找其关键字等于key的数据元素。若找到,则函数值为
       // 该元素在表中的位置,否则为0
       int low=1,high=ST.length;                            //置查找区间初值
       int  mid;
       while(low<=high) {
           mid=(low+high) / 2;
          if (key==ST.R[mid].key)  return mid;              //找到待查元素
          else if (key<ST.R[mid].key)  high = mid -1;       //继续在前一子表进行查找
          else  low =mid +1;                                //继续在后一子表进行查找
       }//while
       return 0;                                        //表中不存在待查元素
    }// Search_Bin
    int Search_Bin2(SSTable ST,int key,int low,int high) {
       // 递归折半查找                            //置查找区间初值
       int  mid;
       if(low>high){
       	 return 0;
       }
       //while(low<=high) {
          mid=(low+high) / 2;
          if (key==ST.R[mid].key)  return mid;              //找到待查元素
          else if (key<ST.R[mid].key)  return Search_Bin2(ST,key,low,mid-1);        //继续在前一子表进行查找
          else return Search_Bin2(ST,key,mid+1,high);  
          
          //继续在后一子表进行查找
       //}//while
         
           
             
               
    }// Search_Bin
    
    void Show_End(int result,int testkey)
    {
        if(result==0)
            cout<<"未找到"<<testkey<<endl;
        else
            cout<<"找到"<<testkey<<"位置为"<<result<<endl;
        return;
    }
    
    int main()
    {
        SSTable ST;
        int low=1;
        InitList_SSTable(ST);
        Insert_SSTable(ST);
        int high=ST.length;
        int testkey1=8,testkey2=200;
        int result;
        cout<<"输入查找的数"<<endl;
    
        //cin>>testkey1>>testkey2;
    
        cout<<"非递归折半查找"<<endl;
        cout<<""<<endl;
        result=Search_Bin(ST, testkey1);
        Show_End(result,testkey1);
        result=Search_Bin(ST, testkey2);
        Show_End(result,testkey2);
        cout<<""<<endl;
    
        cout<<"递归折半查找"<<endl;
        cout<<""<<endl;
        result=Search_Bin2(ST, testkey1,low,high);
        Show_End(result,testkey1);
        result=Search_Bin2(ST, testkey2,low,high);
        Show_End(result,testkey2);
        cout<<""<<endl;
    }
    
    
    ♪(^∇^*)♪(^∇^*)(~ ̄▽ ̄)~有没有感觉很棒呀!!!(#^.^#),(*^▽^*)O(∩_∩)O哈哈~
  • 相关阅读:
    [国嵌攻略][183][账号管理子系统设计]
    [国嵌攻略][182][Sqlite嵌入式数据库移植]
    [国嵌攻略][181][线程池技术优化]
    [国嵌攻略][180][加密传输优化]
    [国嵌攻略][179][OpenSSL加密系统]
    [国嵌攻略][178][网络安全传输系统框架搭建]
    [国嵌攻略][177][网络安全传输系统模型设计]
    [国嵌攻略][174][CGI快速入门-网页控制LED]
    [国嵌攻略][173][BOA嵌入式服务器移植]
    [转载]Architecture and framework
  • 原文地址:https://www.cnblogs.com/ygjzs/p/12061839.html
Copyright © 2011-2022 走看看