在有序数组中查找元素的两种常见方法(顺序查找和折半查找)

数据查找有两种常见方法

  1. 线性查找(或者称顺序查找)

  2. 折半查找(二分查找)


一,线性查找

线性查找又称顺序查找,顾名思义就是按数组中元素的顺序进行一个一个的查找,算法相对简单直观,但是效率较低

代码如下:

#include <stdio.h>
#define N 50
int main()
{
	int scort[N]={0,1,2,3,4,5,6,7,8,9,10,11};
	int se = sizeof(scort)/sizeof(scort[0]);
	int count = 0;
	scanf("%d",&count);//这里接收用户所要查找的数据
	int i = 0;
	while(i<=se)
	{
			if(scort[i]==count)
		{
			printf("找到了,下标是%d",i);
			break;//找到了则跳出循环 ,并打印下标
		 } 
		 i++;
	}
	if(i>se)
	{
		printf("error\n");//打印error则表示所找的数据不在该数组中
	}
	 return 0; 
	 
 } 

二,折半查找

折半查找又称二分查找,搜索过程是从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于元素的那一半中查找,而且跟开始一样从中间元素开始比较,若某一个步骤中数组为空,则代表找不到。折半算法虽然稍微复杂一些,但是效率很高

代码如下:

#include <stdio.h>
#define N 50
int main()
{
	int scort[N] = {0,1,2,3,4,5,6,7,8,9,10,11};
	int right = 11;//右下标 
	int left = 0;//左下标
	int mid;
	int count = 0;
	scanf("%d",&count);
	while(left <= right)
	{
		 mid = (right+left)/2;//中间元素下标
		if(scort[mid] > count)
		{
			right = mid - 1;
		}
		else if(scort[mid] < count)
		{
			left = mid + 1;
		}
		else
		{
			printf("找到了,下标是%d",mid);
			break;
		}
	 } 
	if(left > right)
	{
		printf("error\n");
	}
	return 0;
 } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

遇见陌生人了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值