活动地址:CSDN21天学习挑战赛
算法入门系列-顺序查找
一、顺序查找的概念
顺序查找是一种最简单的查找方法, 其思路是从表的一端向表的另一端进行遍历并与所要查找的值(key)进行比较(表中无重复元素),如果表中元素与key相同,则返回该元素在表中的位置,若表中没有该元素则查找失败。
二、算法分析
想必学过算法的同学都知道
程序=算法+数据结构
,但是在此之前我仅仅是知道但是并不理解这句话,直到今天在写这篇博客我才明白,算法就是我们前面讲的思路,但是如果要实现算法,我们还需要数据结构来作为支撑,算法就好比设计图,而数据结构就好比建筑材料,只有两者相结合才能建好一个建筑。在上一步骤中我们已经得到了该算法的思路,那么我们应该怎样将一个抽象的概念依托一定的数据结构转换为实际的程序,这是算法在实现过程中的重要一步。
数据结构:顺序查找对数据结构并没有特别的要求,无论是顺序表还是链表,也无论元素的顺序,它都能实现,因此我们采用最简单的顺序表来实现。
输入:含有一组元素的数组,一个key值
算法实现:使用for循环遍历数组中的元素,判断数组中的值是否等于key值,如果相等返回该元素的逻辑位置(数组中元素位置+1,如果没有值与key相等,用返回-1表示
输出:数组中元素的逻辑位置
算法的时间复杂度: O(n),最好的情况下只需要查找一次,时间复杂度为O(1),最坏的情况下,遍历到最后一个元素,时间复杂度O(n)
算法的空间复杂度:O(n),n元素占用的空间为n,空间复杂度为O(n)
三、算法实现(java)
private static int seqSearch(int[] arr, int key) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] == key) {
return i + 1;//返回逻辑上的位置
}
}
return -1;//如果查找不到就返回-1
}
四、心得
- 本想用C语言来写这个系列,但是因为长时间不用C语言已经忘得一干二净,所以先用java写,等过段时间复习一下再用C语言补上。这也印证了写博客的重要性,C语言我已经学过两三遍了,笔记也记了很多,但是大多都是照着视频抄笔记,因此长时间不用以后再上手就不行了,自己写博客可以把学过的东西再过一遍脑袋,印象也就更加深刻。
- 其实这个算法本身并不难,难的是怎样去分析一个算法,以前在刷题时总是没有思路,一道题不知道该从哪下手,在经过@一头小山猪的指导后,我学到了很多。一个算法要做的就是给你一个输入,在经过数据操作后得到一个输出,这一点大家肯定是都知道的,但重要的是解决问题的思路,将一个抽象的问题,展开成几个具体的步骤,再一层层将问题剥开,最终解决问题,这样的思路在以后的问题中都是通用的,值得学习。
写在结尾: 俗话说万事开头难,作为一个小白,第一次写这样的技术类文章不知该如何下手,因为自己没有什么技术储备,但是坚持一天就会有一天的收获,加油!
刚开始写博客,文章中难免会有纰漏,如有不足,欢迎各位批评指点。