PTA 6-13 折半查找

解题的关键是理解题目定义的线性表,这个表下标是从1开始的,所以折半查找的low和high也必须从1和length开始

#include <iostream>
using namespace std;

#define MAXSIZE 50
typedef int KeyType;

typedef  struct                     
{ KeyType  key;                                             
} ElemType;  

typedef  struct
{ ElemType  *R; 
  int  length;
} SSTable;                      

void  Create(SSTable &T)
{ int i;
  T.R=new ElemType[MAXSIZE+1];
  cin>>T.length;
  for(i=1;i<=T.length;i++)
     cin>>T.R[i].key;   
}

int  Search_Bin(SSTable T, KeyType k);

int main () 
{  SSTable T;  KeyType k;
   Create(T);
   cin>>k;
   int pos=Search_Bin(T,k);
   if(pos==0) cout<<"NOT FOUND"<<endl;
   else cout<<pos<<endl;
   return 0;
}
int  Search_Bin(SSTable T, KeyType k) {
    int mid, low = 1, high = T.length;
    while (low <= high) {
        mid = (low + high) / 2;
        if (T.R[mid].key == k) return mid;
        else if (T.R[mid].key > k) high = mid - 1;
        else if (T.R[mid].key < k) low = mid + 1;
    }
    return 0;
}

 

posted on 2021-01-14 22:51  letwant  阅读(254)  评论(0编辑  收藏  举报

导航