欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PTA习题解答 基础编程题目集 6-13 折半查找

程序员文章站 2022-06-09 20:16:23
...

题目:

给一个严格递增数列,函数int Search_Bin(SSTable T, KeyType k)用来二分地查找k在数列中的位置。

函数接口定义:

int  Search_Bin(SSTable T, KeyType k)

其中T是有序表,k是查找的值。
PTA习题解答 基础编程题目集 6-13 折半查找
题目给出的部分:


#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 left=1;
	int right=T.length;
	while(left<=right)
	{
		KeyType halfKey = T.R[(left+right)/2].key;//中间位置的值 
		if(k==halfKey)
			return (left+right)/2;
		else if(k>halfKey)
			left = (left+right)/2+1;
		else
			right = (left+right)/2-1;
		
	}
	return 0;
}

心得:

此题为一个基础的二分折半查找。

相关标签: PTA刷题基础类

上一篇: 二分图匹配

下一篇: WERTYU UVa10082