活动地址:CSDN21天学习挑战赛
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。
最近小编在跟着大神@一头小山猪学习算法,学习的目的主要是想督促自己学习,算法是基础,需要经常回顾,所以小编整了下学习内容,当作自己的笔记,也希望自己的blog可以帮助有需要的人。
在学习之前需要有一些基础,比如,什么是算法,怎么评估算法的好坏呢等等,那小编就用非常简洁的语言再帮大家回顾一下。
算法
简而言之就是步骤明确的解决问题的方法。
算法的效率是通过时间复杂度
和空间复杂度
来评估的。
今天主要给小伙伴们分享是顺序查找
,那何为顺序查找?
顺序查找又称为线性查找,基本思想是:从线性表的一端开始,依次将线性表中记录的元素与给定值进行比较,若线性表中的元素等于给定值,表示查找成功,返回元素下标;否则查找失败,返回-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
针对顺序查找,小编提供了两种语言
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;
}
}
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)
执行算法时并未改变原有集合,只需要一个额外的变量控制索引变化,所以空间复杂度为O(1)。
结语:你若喜爱自己的价值,你就得给世界创造价值。