每天学习一个基础算法之顺序查找
目录
前言:
1、对顺序查找概念的诠释
2、顺序查找的使用场景
3、顺序查找的实现代码
顺序查找主体(以接口函数的形式)
测试部分(主函数调用)
调试结果
前言:
查找也是一种经常使用的算法,即根据给定的值,在一组数据中找到一个等于给定值的记录或数据元素,例如查找列车车次、学号、房间号等等。今天我们要学习的是基础的查找算法之一线性查找。
1、对顺序查找概念的诠释
顺序查找也称线性查找,即从数据结构线性表的一端开始,顺序扫描,依次将扫描的结果与给定的值进行匹配,若相等则表示查找成功;若扫描结束仍然没有与给定值匹配的结果则表示查找失败。
2、顺序查找的使用场景
顺序查找多用于查找无序的数据,若对有序数据采用顺序查找进行查找,则会大大降低程序的运行效率。
(当遇到有序数据时,我们一般会采用二分查找法,它能大大提高查找的效率,对二分查找法我会放到下一篇博客中。)
注意:若只对少量数据只需进行查找,而不进行其它操作的情况下,为单纯使用二分查找法来增加效率,而对无序数据进行排序,其实效率是远不如直接用顺序查找法进行查找的。 所以学会使用顺序查找是必要的。
3、顺序查找的实现代码
顺序查找的代码是十分容易实现的,它本质上就是对一个数组进行遍历。本次代码仍然以函数形式呈现。
顺序查找主体(以接口函数的形式)
//线性查找法的实现
int linear_seek(int arr[], int sz, int target)
{
int i = 0;
for (i = 0; i < sz; i++)
{
if (arr[i] == target)
{
return i;
}
}
return -1;
}
实现思路:
对传入数组进行遍历(顺序扫描),若匹配结果与给定值相同,返回遍历到数的下标(索引),若遍历到最终仍然没有与给定值匹配的结果则返回-1(-1可以改为任何与查找到的返回值不冲突的值),表示数组中没有与给定值相等的数据。
测试部分(主函数调用)
#include <stdio.h>
int main()
{
int arr[] = { 10,7,4,9,6,1,8,3,2,5 };
int sz = sizeof(arr) / sizeof(arr[0]);
int ret = linear_seek(arr, sz, 4);
if (ret != -1)
{
printf("下标为%d\n", ret);
}
else
{
printf("没找到!\n");
}
return 0;
}
调试结果
每日一学,今天你又超过了百分之九十九的人。
如果本篇文章对你有帮助,请点个关注和赞吧!
若是对本文有什么独特的见解,也可以在评论区进行讨论。