码迷,mamicode.com
首页 > 编程语言 > 详细

算法 基础

时间:2020-02-08 17:58:15      阅读:94      评论:0      收藏:0      [点我收藏+]

标签:数据分区   计算   位置   快速   ack   比较   最小值   tmp   range   

算法复杂度

时间复杂度:用来估计算法运行时间的一个单位;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

 位运算: & | - ^

 

算法 基础

标签:数据分区   计算   位置   快速   ack   比较   最小值   tmp   range   

原文地址:https://www.cnblogs.com/Christbao/p/12283836.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!