算法复杂度
时间复杂度:用来估计算法运行时间的一个单位;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
位运算: & | - ^
原文地址:https://www.cnblogs.com/Christbao/p/12283836.html
时间: 2024-10-12 15:49:33