一.二分法查找:
核心: 掐头去尾取中间. 一次砍一半
二分查找. 每次能够排除掉一半的数据. 查找的效率非常高. 但是局限性比较大. 必须是有
序序列才可以使用二分查找
两种算法: 常规循环, 递归循环
# 使用二分法可以提高效率, 前提条件:有序序列 lst = [22, 33, 44, 55, 66, 77, 88, 99, 101 , 238 , 345 , 456 , 567 , 678 , 789] n = 88 left = 0 right = len(lst)-1 while left <= right: # 边界, 当右边比左边还小的时候退出循环 mid = (left + right)//2 # 必须是整除. 因为索引没有小数 if lst[mid] > n: right = mid - 1 if lst[mid] < n: left = mid + 1 if lst[mid] == n: print("找到了这个数") break else: print("没有这个数")
递归来完成二分法
lst = [22, 33, 44, 55, 66, 77, 88, 99, 101 , 238 , 345 , 456 , 567 , 678 , 789] def func(n, left, right): if left <= right: # 边界 print("哈哈") # 计算查找了几次 mid = (left + right)//2 if n > lst[mid]: left = mid + 1 return func(n, left, right) # 递归 递归的入口 elif n < lst[mid]: right = mid - 1 # 深坑. 函数的返回值返回给调用者 return func(n, left, right) # 递归 elif n == lst[mid]: print("找到了") return mid # return # 通过return返回. 终止递归 else: print("没有这个数") # 递归的出口 return -1 # 1, 索引+ 2, 什么都不返回, None # 找66, 左边界:0, 右边界是:len(lst) - 1 ret = func(70, 0, len(lst) - 1) print(ret) # 不是None
# 时间复杂度最低, 空间复杂度最低, 只需找一次,缺点也明显 lst1 = [5,6,7,8] lst2 = [0,0,0,0,0,0,0,0,0] for el in lst1: lst2[el] = 1 if lst2[4] == 1: # o(1) print('找到了') else: print("没找到")
二.冒泡排序
顾名思义,冒泡排序直观的意思是气泡越大冒的越快:),对应到我们的列表中就是数字最大的先选出来,然后依次进行。例如 myList = [1,4,5,0,6],比较方式为:
相邻的两个数字先进行比较,也就是myList[0]和myList[1],发现不是">"的关系,就继续比较myList[1]和myList[2]。。。依次进行,发现myList[2]>myList[3](及5>0),就进行交换,所以走完第一次全列表比较得到新列表[1,4,0,5,6],然后每一次扫描得到的新列表如下:
第一次:[1,4,0,5,6]
第二次:[1,0,4,5,6]
第三次:[0,1,4,5,6]
第四次:[1,4,5,0,6]
时间复杂度:O(n^2). 需要进行的比较次数为第一轮 n-1,n-2....1, 总的比较次数为 n*(n-1)/2
1 def bubbleSort(myList): 2 #首先获取list的总长度,为之后的循环比较作准备 3 length = len(myList) 4 5 #一共进行几轮列表比较,一共是(length-1)轮 6 for i in range(0,length-1): 7 8 #每一轮的比较,注意range的变化,这里需要进行length-1-长的比较,注意-i的意义(可以减少比较已经排好序的元素) 9 for j in range(0,length-1-i): 10 11 #交换 12 if myList[j] > myList[j+1]: 13 tmp = myList[j] 14 myList[j]=myList[j+1] 15 myList[j+1] = tmp 16 17 #打印每一轮交换后的列表 18 for item in myList: 19 print(item) 20 print("=============================") 21 22 print("Bubble Sort: ") 23 myList = [1,4,5,0,6] 24 bubbleSort(myList)