递归&二分查找&时间复杂度、空间复杂度和稳定性

167 阅读3分钟

递归

递归条件

  • 自己调用自己
  • 有结束条件

二分查找

二分查找对1~100乱序数字查找

l = list(range(1,101))
def bin_search(data_set,val):
   low = 0
   high = len(data_set) - 1
   while low <= high:
      mid = (low+high)//2
      if data_set[mid] == val:
         return mid
      elif data_set[mid] < val:
         low = mid + 1
      else:
         high = mid - 1
   return
n = bin_search(l,11)
print(n)            # 返回结果是: 10

时间复杂度、空间复杂度和稳定性

一个算法是由控制结构(顺序、分支和循环3种)和原操作(指固有数据类型的操作)构成的,则算法时间取决于两者的综合效果。为了便于比较同一个问题的不同算法,通常的做法是,从算法中选取一种对于所研究的问题(或算法类型)来说是基本操作的原操作,以该基本操作的重复执行的次数作为算法的时间量度。

时间复杂度的概念

一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度

在这里插入图片描述
常见的算法时间复杂度由小到大依次为:Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3)<…<Ο(2n)<Ο(n!)

各种算法比较
在这里插入图片描述
空间复杂度概念

空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度。一个算法在计算机存储器上所占用的存储空间,包括存储算法本身所占用的存储空间,算法的输入输出数据所占用的存储空间和算法在运行过程中临时占用的存储空间这三个方面

算法不稳定定义

在排序之前,有两个数相等,但是在排序结束之后,它们两个有可能改变顺序.

说明:

在一个待排序队列中,A和B相等,且A排在B的前面,而排序之后,A排在了B的后面.这个时候,我们说这种算法是不稳定的.

不稳定的几种算法

  • 快排为什么不稳定
 3 2 2 4 经过第一次快排后结果:2 2 3 4 (第3号位置的2第一次排序后跑到第1号位置了)
  • 堆排序为什么不稳定

在这里插入图片描述

如果堆顶3先输出,则,第三层的27(最后一个27)跑到堆顶,然后堆稳定,继续输出堆顶,是刚才那个27

这样说明后面的27先于第二个位置的27输出,不稳定
  • 选择排序为什么不稳定
5 8 5 2 9 第一次假定1号位置的5最小,但是实际最小的是4号位置的2

第一次排序后为:2 8 5 5 9 以前1号位置的5跑到3号位置5的后面了

空间,时间复杂度参考这个       
详细链接参考这个链接