经典算法之顺序查找(Sequential Search)

活动地址:CSDN21天学习挑战赛

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。


1. 前言

最近小编在跟着大神@一头小山猪学习算法,学习的目的主要是想督促自己学习,算法是基础,需要经常回顾,所以小编整了下学习内容,当作自己的笔记,也希望自己的blog可以帮助有需要的人。
在学习之前需要有一些基础,比如,什么是算法,怎么评估算法的好坏呢等等,那小编就用非常简洁的语言再帮大家回顾一下。

2. 算法基本概念

算法简而言之就是步骤明确的解决问题的方法。
算法的效率是通过时间复杂度空间复杂度来评估的。

  • 时间复杂度:
    就是每一段代码的执行时间的总和,常见的时间复杂度有(由低到高):
    在这里插入图片描述
  • 空间复杂度:
    算法运行时需要额外的临时变量的个数或者多少存储结构。

4. 顺序查找

今天主要给小伙伴们分享是顺序查找,那何为顺序查找?
顺序查找又称为线性查找,基本思想是:从线性表的一端开始,依次将线性表中记录的元素与给定值进行比较,若线性表中的元素等于给定值,表示查找成功,返回元素下标;否则查找失败,返回-1。

4.1 伪代码

伪代码如下

//while循环
i = 1
while i <= A.length
	if A[i] == key
		return i
	i++
return -1
//或者for循环
i = 1
for (i = 1; i <= A.length; i++)
	if A[i] = key
		return i
return -1

针对顺序查找,小编提供了两种语言

4.2 Java 版

public class SequentialSearch {
    
    
    public static void main(String[] args) {
    
    
        int[] a = {
    
     11, 34, 20, 10, 12, 35, 41, 32, 43, 14 };
        int key = 10;
        int result = search(a, key);
        // System.out.println(result);
        if (result != -1) {
    
    
            System.out.println("10的下标为:" + result);
        } else {
    
    
            System.out.println("找不到该元素");
        }
    }

    private static int search(int[] a, int key) {
    
    
        for (int i = 0; i < a.length; i++) {
    
    
            if (a[i] == key) {
    
    
                return i;
            }
        }
        return -1;
    }
}

4.3 Python 版

def sequent(alist,key):
    for i in range(len(alist)):
        if alist[i]==key:
            return i
    return None

if __name__ == '__main__':
    alist = [11, 34, 20, 10, 12, 35, 41, 32, 43, 14]
    key = 41
    result = sequent(alist,key)
    print(result)

4. 算法效率分析

4.1 时间复杂度

  • 最坏情况
    最坏的情况是遍历了整个线性表,都没有找到目标元素。循环次数和N相关,所以时间复杂度为O(n)。
  • 最好情况
    遍历第一个元素就找到了目标元素。所以时间复杂度为O(1)。
  • 平均情况
    综上两种情况,得出顺序查找的时间复杂度为O(n),属于查找较慢的算法。

4.2 空间复杂度

执行算法时并未改变原有集合,只需要一个额外的变量控制索引变化,所以空间复杂度为O(1)。


结语:你若喜爱自己的价值,你就得给世界创造价值。

猜你喜欢

转载自blog.csdn.net/weixin_42182599/article/details/126187450