python的简单的搜索和排序算法
-
查找算法
-
查找是否存在
-
线性搜索
-
#线性查找一个数是否存在 a=[] x=int(input()) flag=False for k in a: if k==x: flag=True break #如果使用for实现的话,必须需要一个flag标志,因为他跟c的for不太一样,for循环最后的值是a中最后一个元素,有可能你的数就在最后一位 #突然相当,也可以利用python的for. else实现,这就不需要break a=[] x=int(input()) for k in a: if k==x: break else: print("not found") #由于break会跳出for循环,包括else,就算在最后一个也没事 a=[] x=int(input()) while index <len(a): if a[index]==x: break else: print("not found") #因为python多了一个else,所以换成c的话就是 if index>=len(a): print("not found") #当然for也可以用range(len(a))进行下标检索,但如果不使用else语句的话,还是要用flag位,就算是for index in range(len(a)),index最后的结果还是len(a)-1 #不过我还是推荐大家使用下标吧,因为下标可以给予我们多的一个信息,但有人会说,有index函数呀,就算有这个函数,你在循环里面>,>=效果是不一样的,一个是首次出现,一个是最后一次出现,用index,少给自己找麻烦
-
-
二分查找
-
#二分可以理解为每次查找范围缩一半,前提一个要是个排序好的数组,而且是按照从小到大,不过从大到小也可以,只是改变二分缩的方向, a=[] x=int(input()) left=0 right=len(a)-1 index=-1#保存下标 #这里我们考虑一下跳出循环的条件,如果一直不匹配的话,数组缩到1个元素,这个时候发生什么,left=right,如果我们要查找的数偏小,right-1,偏大,left+1,最后left都会大于right while left<=right: mid=(left+right)//2 if a[mid]>x: #说明x在左边 right=mid-1 elif a[mid]<x: left=mid+1 else: index=mid break
-
-
-
最值
-
线性搜索
-
a=[] max_index=0 for index in range(1,len(a)): if a[max_index]<a[index]: max_index=index break #这里我就算不加break,也一定保存的是首次出现的最大值,我加break只是防止浪费资源
-
-
-
-
排序算法
-
选择排序
-
#把最大值放到最后,把最小值放到最前面 a=[] #最大值的 for right in range(len(a)-1,0,-1): #这是外层循环,len(a)-1开始,到1结束(不会到0,所以到1),不需要到0因为到0了只有一个数了,不需要比较 maxid=0 for index in range(1,right+1): #要遍历到right+1,因为这里的right代表的是最后一个元素,right+1实际上只到right(range特性) if a[maxid]<a[index]: maxid=index a[maxid],a[right]=a[right],a[maxid] #最小值的 for left in range(len(a)-1): #只用做到len(a)-2就好,到len(a)-1的时候只有一个数了 minid=left for index in range(left+1,len(a)): if a[minid]>a[index]: minid=index a[minid],a[index]=a[index],a[minid]
-
-
冒泡排序
-
#同样可以有两个方向冒泡,大和小 #这里以最大值冒泡,放到最后面 a=[] for right in range(len(a)-1,0,-1): for index in range (right): if a[index]>a[index+1]: a[index],a[index+1]=a[index+1],a[index]
-
-