折半查找算法

折半查找

折半查找也称二分查找,但它要求查找表必须是顺序结构存储且表中数据元素按关键码有序。折半查找在查找成功时,所进行的关键码比较次数至多为⎡log2(n+1)⎤。平均查找长度为ASL=log2(n+1)-1,时间复杂度是O(log2n)。

折半查找的程序代码如下:

#include

#define MAXSIZE 10

typedef int DataType;

typedef struct S_T{

DataType data[MAXSIZE];

int length;

}S_T;

void CreateS_T(S_T *t){

int i;

cout

cin>>t->length;

t->data[0]='z';

for(i=1;ilength;i++)

cin>>t->data[i];

}

int Binary_Search(S_T *t,DataType kx){

int low,high,mid;

int count;

int flag;

low=1;

count=1;

high=t->length;

flag=0;

while(low

mid=(low+high)/2;

if(kxdata[mid])

high=mid-1;

else

if(kx>t->data[mid])

low=mid+1;

else{

flag=mid;

break;

}

count++;

}

cout

return flag;

}

void main(){

int i;

DataType kx;

S_T *t=new S_T;

CreateS_T(t);

cout

cin>>kx;

i=Binary_Search(t,kx);

if(i==0)

cout

else

cout

折半查找

折半查找也称二分查找,但它要求查找表必须是顺序结构存储且表中数据元素按关键码有序。折半查找在查找成功时,所进行的关键码比较次数至多为⎡log2(n+1)⎤。平均查找长度为ASL=log2(n+1)-1,时间复杂度是O(log2n)。

折半查找的程序代码如下:

#include

#define MAXSIZE 10

typedef int DataType;

typedef struct S_T{

DataType data[MAXSIZE];

int length;

}S_T;

void CreateS_T(S_T *t){

int i;

cout

cin>>t->length;

t->data[0]='z';

for(i=1;ilength;i++)

cin>>t->data[i];

}

int Binary_Search(S_T *t,DataType kx){

int low,high,mid;

int count;

int flag;

low=1;

count=1;

high=t->length;

flag=0;

while(low

mid=(low+high)/2;

if(kxdata[mid])

high=mid-1;

else

if(kx>t->data[mid])

low=mid+1;

else{

flag=mid;

break;

}

count++;

}

cout

return flag;

}

void main(){

int i;

DataType kx;

S_T *t=new S_T;

CreateS_T(t);

cout

cin>>kx;

i=Binary_Search(t,kx);

if(i==0)

cout

else

cout


相关文章

  • 顺序查找.折半查找
  • 顺序查找与折半查找的比较 顺序查找简单的从头到尾的查找,对数据没有要求,而折半查找要求查找的数据是按顺序排列的,然后找中间数,若中间数大,则把中间数当成最后一个数找他们的中间数.反之,则把中间数当成第一个数.找他们的中间数.这样,一直找下去 ...查看


  • 实验六磁盘调度算法
  • 实验六 磁盘调度算法 一. 需求分析 ..................................................................................................... ...查看


  • SeOpiamal静态树表的查找
  • 静态树表的查找 9.1.3 静态树表的查找 上一小节对有序表的查找性能的讨论是在"等概率"的前提下进行的,即当有序表中各记录的查找概率相等时,按图9.2所示判定树描述的查找过程来进行折半查找,其性能最优.如果有序表中各记 ...查看


  • 算法设计与分析基础习题参考答案
  • 习题 1.1 5..证明等式 gcd(m,n)=gcd(n,m mod n)对每一对正整数 m,n 都成立. Hint: 根据除法的定义不难证明: 如果 d 整除 u 和 v, 那么 d 一定能整除 u±v; 如果 d 整除 u,那么 d ...查看


  • 算法设计与分析(第2版)-王红梅-胡明-习题答案
  • 算法设计与分析(第2版)-王红梅-胡明-习题 答案 习题1 1. 图论诞生于七桥问题.出生于瑞士的伟大数学家欧拉(Leonhard Euler,1707-1783) 提出并解决了该问题.七桥问题是这样描述的:一个人是否能在一次步行中穿越哥尼 ...查看


  • [数据结构]期末考试题及答案
  • 2011-2012学年第一学期期末考查 <数据结构>试卷 (答案一律写在答题纸上,在本试卷上做答无效) 一.选择(每题1分,共10分) 1. 长度为n 的线性表采用顺序存储结构,一个在其第i 个位置插入新元素的算法时间复杂度为( ...查看


  • 计算思维案例及平时成绩讨论题
  • 1.5本章计算思维的典型案例 案例1: 计算作为人类文明的开端,从最远古的手指计数到中国古代的算盘计算到近代西方的纳皮尔算筹及帕斯卡机械式计算机,至当前的电子计算机的高速度计算,不管是计算方法还是计算工具都有了变革性的创新,计算也作为一种思 ...查看


  • 若对大小均为n的有序顺序表和无序顺序表分别进行顺序查
  • 第九章 查找 9.1 若对大小均为n的有序顺序表和无序顺序表分别进行顺序查找,试在下列三种情况下分别讨论两者在等概率时平均查找长度是否相同? (1)查找不成功,即表中没有关键字等于给的值K的记录: (2)查找成功,且表中只有一个关键字等于给 ...查看


  • 数据结构上机实验报告
  • 实验一:线性表的基本操作 [实验目的] 学习掌握线性表的顺序存储结构.链式存储结构的设计与操作.对顺序表建立.插入.删除的基本操作,对单链表建立.插入.删除的基本操作算法. [实验内容] 1. 顺序表的实践 1) 建立4个元素的顺序表s=s ...查看


热门内容