4.不常见的时间复杂度
o(n!)/o(2^n)/o(n^n)
5.如何一眼判断时间复杂度?
-循环的过程中出现了循环减半-----o(logn)
-几次n的循环就是n的几次方的复杂度
二、空间复杂度
1.空间复杂度:用来评估算法内存占用大小的一个式子
2."空间换时间"
三、递归
1、递归的两个特点:
-调用自身
-有结束条件
四、列表查找
1.列表查找:从列表中查找指定元素
-输入:列表、待查找元素。->无序列表
-输出:元素下标或未查找到元素。有序列表

2.顺序查找
-从列表第一个元素开始,顺序进行搜索,知道找到为止
3.二分查找
-从有序列表的候选区data[0:n]开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半。
li = list(range(0,1000,2))
== len(li)-1
low <== (low+high)//2
data_set[mid] == data_set[mid] >= mid-1
= mid+1 else: return None
low<== (low+high)//2
data_set[mid]== data_set[mid]> bin_search_rec(data_set,mid-1 bin_search_rec(data_set,mid+1
4.汉诺塔问题
n>-1(%-1
五、排序方法
1.冒泡排序
i range(len(li)-1 j range(len(li)-i-1 li[j]>li[j+1+1] = li[j+1
<span style="color: #800000">"""
<span style="color: #800000">
优化
<span style="color: #800000">"""
<span style="color: #0000ff">def<span style="color: #000000"> bubble_sort_1(li):
<span style="color: #0000ff">for i <span style="color: #0000ff">in range(len(li)-1<span style="color: #000000">):
exchange =<span style="color: #000000"> False
<span style="color: #0000ff">for j <span style="color: #0000ff">in range(len(li)-i-1<span style="color: #000000">):
<span style="color: #0000ff">if li[j]>li[j+1<span style="color: #000000">]:
li[j],li[j]
exchange =<span style="color: #000000"> True
<span style="color: #0000ff">if <span style="color: #0000ff">not<span style="color: #000000"> exchange:
<span style="color: #0000ff">return
2.选择排序
i range(len(li)-1= j range(i+1 li[j]<= min_loc ! ==
3.插入排序
i range(1== i-1
j>=0 tmp<+1]==j-1+1]=
4.快速排序
left <=-1+1= left< left data[right] >=-=1= left data[left]<=+=1== left
5.堆排序
== 2*2+1
j<= j data[j]+=1
tmp <=== 2*i+1
== i range(n//2-1,-1,-1-1 i range(n-1,-1=-1)
#python内置排序--heapq
-heapify(x)
-heappush(heap,item)
-heappop(heap)
优先队列:一些元素的集合,pop操作每次执行都会从优先队列中弹出最大(或最小)的元素
堆---优先队列
= value [heappop(h) i range(len(h))]
#Top-k问题
= i range(k//2-1,-1-1 i =-1 i range(k-1,-1=-1)
6.归并排序
== mid+1= i <=mid j <= li[i]<=+=1
+=1
i <=+=1
j<=+=1+1] =
low<= (low+high)//2
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!