比较两种查找方法各自的优点与缺点

1.两种查找方法的简介

        在数组中,查找数组元素有遍历查找和二分查找两种方式。

        遍历查找:顾名思义,就是遍历数组查找元素,即遍历数组并判断其中的元素与所求的元素是否相同。

        二分查找:是一种高效的查找算法,通过不断将查找范围缩小一半来快速接近目标值。(使用它的前提是数组有序)

2.遍历查找

        遍历查找(线性查找)是一种最基本的查找算法,用于在数据集合中找到特定的元素。它的主要工作原理是从头到尾逐一访问每个元素,比较目标值并判断是否找到。下面我们通过一段代码来深入了解它:

// 遍历
int main()  
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int k = 7;            //要查找的元素
    int sz=sizeof(arr)/sizeof(arr[0]);//计算数组元素个数
    int flag = 0;
	for (int i = 0; i < sz; i++)
	{
        //查找
		if (arr[i] == k)
		{
			flag=1;
			printf("找到了,下标为%d", i-1);
			break;
		}
	}
        if(flag==0)
			printf("找不到");
	return 0;
}

         下面我们通过代码来剖析一下他的工作原理

         1、通过for循环开始遍历数组。

         2、通过if()语句逐一比较数组元素与目标值。

        3、若找到,则flag赋值为1,并输出其下标,跳出循环 ;若没找到则flag仍为0,输出没找到语句。(注意:无论哪种查找方式都需要放回一个标志值,让用户知道程序是否运行结束)。

3.二分查找

         二分查找是一种高效的查找算法,通过不断缩小查找范围来查找元素,使用它的前提是数组必须有序。下面我们通过代码来认识一下它:

//二分查找
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int k = 7;
	int left = 0;						//注意left和right均为下标
	int sz = sizeof(arr)/sizeof(arr[0]);
	int right = sz - 1;					//计算数组元素个数-1
	int flag = 0;
	//开始二分查找
	while (left <= right)
	{
		//int mid = (left + right) / 2;                  //计算中间值,超出范围容易报错
		int mid = left + (right - left) / 2;			//计算中间值,每次循环进行重新计算
		if (k > arr[mid])
		{
			left = mid + 1;
		}
		else if (k < arr[mid])
		{
			right = mid - 1;
		}
		else
		{
			printf("找到了,下标是%d", mid);
			flag = 1;
			break;					//找到跳出循环
		}
	}
	if (flag = 0)
	{
		printf("没找到");
	}
	return 0;
}

        下面我们通过解析和画图来理解二分查找的具体流程:

        1.先设定查找的范围(0到数组长度-1)。

        2.计算中间值。

        3.进行比较(下图展示的是比较和具体操作的过程):

        4.重复查找,找到返回下标。

4.各自的优点和缺点

        遍历查找:

                        优点:1.简单明了,容易理解

                                   2.支持无序数据,使用范围较广

                        缺点:1.效率低(时间复杂度为O(n))

                                   2.比较次数多,耗费时间久

                                   3.不适合处理大量数据

        二分查找:

                        优点:1.效率高(时间复杂度为O(log(n))

                                   2.比较次数少,耗费时间少

                                   3.适用于处理大量有序的数据

                        缺点:1.数组要求有序,局限性大

                                   2.相比遍历查找较复杂

                                   3.如果处理变化的数据,产生的维护成本高 

5.总结    

        遍历查找适合小规模或无序数据及简单情况,易于实现,但效率低。

        二分查找适合大规模有序数据,高效快捷,但对数据有序性有要求。

        根据具体场景和需求,选择合适的查找算法可以显著提高性能和效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值