数据结构——折半查找

        今天是冬至呀!!!大家记得吃饺子,吃汤圆,吃好多好吃的!!!

        在本篇文章中我将为大家介绍一种数据查找方法——折半查找(并附加完整代码)

        问题背景:

        我们要在一个数据为{1,2,3,4,5,6,7,8,9,10}的顺序表中查找某一个元素的具体位置。

        算法设计:

        首先,我们需要建立一个顺序表,并且将给出的数据保存到顺序表中;

        然后,我们需要建立一个基础的结构框架,并确定主函数与子函数之间的参数;

        然后,我们开始编写我们的子函数,使我们的子函数实现查找的功能,在这里我们使用折半查找的算法实现目标程序;

        最后,我们对已经编写出的代码进行调试和运行;

        折半查找:

        折半查找又称为二分查找,其使用前提是顺序表有序。

        对于该方法我们需要三个指针mid(指向中心位置)、low(指向头部)、high(指向尾部),然后我们将我们需要查找的数值与mid指向的数值进行比较,如果数值与mid指向的数据相等,则返回mid;如果数据小于mid则high=mid-1,进行递归查找;如果数据大于mid则low=mid+1,进行递归查找;递归查找停止的条件是high<=low。

        完整实现代码:

#include<stdio.h>
#include<malloc.h>

//顺序表元素的结构
typedef struct sq
{
	int data;
	int number;
}Sq;

//折半查找函数
int Reaserch(Sq *s,int dest,int n)
{
	int low=0,high=n-1,mid,count=1;
	while(low<=high)
	{
		mid=(low+high)/2;
		printf("第%d次在[%d,%d]中比较元素%d\n",count++,low,high,s[mid].data);
		if(s[mid].data==dest)
			return mid+1;
		if(s[mid].data>dest)
			high=mid-1;
		else
			low=mid+1;
	}
	return 0;
}

int main()
{
	int a[]={1,2,3,4,5,6,7,8,9,10},i,n=10,dest,R;
	Sq S[10];
	//对建立的顺序表进行初始化
	for(i=0;i<n;i++)
	{
		S[i].data=a[i];
		S[i].number=i+1;
	}
	printf("请输入要查找位置的数字\n");
	scanf("%d",&dest);
	R=Reaserch(S,dest,n);
	if(R!=0)
		printf("%d的位置是:%d\n",dest,R);
	else
		printf("没有查找的%d的位置\n",dest);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值