算法 基础
Posted christbao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法 基础相关的知识,希望对你有一定的参考价值。
算法复杂度
时间复杂度:用来估计算法运行时间的一个单位;O(n)、O(1) 常见于for循环, 或者log(n)—常见于while循环。循环减半时复杂度为log(n)
常见时间复杂度排序 O(1) < O(logn)< O(n) < O(n^log n) < O(n^2) < O(n^2 log n ) < O(n^3)
空间复杂度:估算算法内存占用大小的单位;"空间换时间";
算法:完成算法基础模块后,算法优化是关键点(方法:查找算法模块中重复或者无效计算,用内层加判断替换)
递归算法:调用自身,结束条件 --- 汉诺塔,斐波那契数列
列表查找:顺序查找(for循环),二分查找(数据候选区二分data[:0],查找范围缩减一半)
排序l初级:冒泡、选择、插入;------- 思想:数据分区(有序区/无序区,已查找/未查找),数据比较,数据换位
排序高级:快速排序、堆排序、归并排序
#冒泡排序
def bubble_sort(li): for i in range(len(li)-1): # i 表示第N趟,一共n或者n-1趟 exchange = False for j in range(len(li) - i - 1): #第i趟,无序区【0,n-i-1】 j 表示箭头 0- n-i-2 if li[j] > li[j+1]: li[j],li[j+1] = li[j+1],li[j] exchange = True if not exchange: break
#选择排序
def select_sort(li):
for i in range(len(li)-1): #n 或者n-1 趟
min_pos = i #第i趟无序区范围 i~最后 #min_pos 更新为无序区最小值位置
for j in range(i+1,len(li)):
if li[j] < li[min_pos]:
min_pos = j
li[i],li[min_pos] = li[min_pos],li[i]
#插入排序
def insert_sort(li):
for i in range(1,len(li)): #i表示摸到的牌的下标
tmp = li[i] #摸到的牌
j = i - 1
while j >= 0 and li[j] > tmp: #只要往后挪就循环, 2个条件都得到满足
li[j+1] = li[j] #如果 j = -1 停止挪,如果li[j] 小了,停止挪
j -= 1 #j位置在循环结束时要么是 -1,要么是一个比tmp小的值
li[j+1] = tmp
位运算: & | - ^
以上是关于算法 基础的主要内容,如果未能解决你的问题,请参考以下文章