码迷,mamicode.com
首页 > 其他好文 > 详细

实现有序表二分查找

时间:2019-12-18 20:15:45      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:space   bin   sea   length   等于   namespace   ble   table   class   

二分查找递归与非递归

//算法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;
}

实现有序表二分查找

标签:space   bin   sea   length   等于   namespace   ble   table   class   

原文地址:https://www.cnblogs.com/ygjzs/p/12061839.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!