算法-----python实现
斐波那契数列
def f(n):
if n == 1:
return 1
elif n == 2:
return 1
else:
return f(n-1)+f(n-2) print(f(8))
用普通函数实现斐波那契数列:
def f(n):
li = [0,1,1]
if n <=2:
return li[n]
for i in range(3,n+1):
li.append(li[-1]+li[-2])
return li[n] print(f(8))
常见的时间复杂度(按照效率排序)
O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n2logn)<O(n3)
递归实例:汉诺塔问题
def hanoi(n,A,B,C):
if n > 0:
hanoi(n-1,A,C,B)
print("%s->%s"%(A,C))
hanoi(n-1,B,A,C) hanoi(4,"A","B","C")
二分查找
def binary_search(li, val):
low = 0
high = len(li) - 1
while low <= high:
mid = (low + high) // 2
if li[mid] < val:
low = mid + 1
elif li[mid] > val:
high = mid -1
else:
return mid
return None
冒泡排序
import random def bubble_sort(li):
for i in range(len(li)-1): # i表示第i趟,共n-1趟
# 第i趟 无序区范围 0~n-i-1
for j in range(len(li)-i-1):
if li[j] > li[j+1]:
li[j],li[j+1] = li[j+1],li[j]
print(li) li = [8,5,7,9,4,2,6,1,3]
bubble_sort(li)
冒泡排序------优化
@cal_time
def bubble_sort_2(li):
for i in range(len(li)-1):
exchange = False
for j in range(len(li)-1):
if li[j] > li[j+1]:
li[j],li[j+1] = li[j+1],li[j]
exchange = True
if not exchange:
return li=list(range(10000))
random.shuffle(li)
bubble_sort_2(li)
冒泡排序最好时间复杂度是O(n),最坏时间复杂度是O(n2)
选择排序:
import random
from cal_time import * # 找到最小数的位置
def find_min_pos(li):
min_pos = 0
for i in range(1,len(li)):
if li[i] < li[min_pos]:
min_pos = i
return min_pos @cal_time
def select_sort(li):
for i in range(len(li)-1):
min_pos = i
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] li = list(range(10000))
select_sort(li)
选择排序没有最好排序,最坏时间复杂度是O(n2)
插入排序:
import random
from cal_time import *
@cal_time
def insert_sort(li):
for i in range(1,len(li)):
# i 表示趟数 还表示摸到牌的位置
j = i-1
tmp = li[i]
while j>=0 and li[j] > tmp:
# 两个终止条件: 1. j==-1 2. j位置的值小于等于tmp
li[j+1] = li[j]
j -=1
li[j+1] = tmp li = list(range(10000))
random.shuffle(li)
insert_sort(li)
插入排序的最好情况也是O(n),最坏时间复杂度是O(n2)
冒泡排序,选择排序,插入排序的空间复杂度是O(1)
快速排序:
算法-----python实现的更多相关文章
- pageRank算法 python实现
一.什么是pagerank PageRank的Page可是认为是网页,表示网页排名,也可以认为是Larry Page(google 产品经理),因为他是这个算法的发明者之一,还是google CEO( ...
- 常见排序算法-Python实现
常见排序算法-Python实现 python 排序 算法 1.二分法 python 32行 right = length- : ] ): test_list = [,,,,,, ...
- kmp算法python实现
kmp算法python实现 kmp算法 kmp算法用于字符串的模式匹配,也就是找到模式字符串在目标字符串的第一次出现的位置比如abababc那么bab在其位置1处,bc在其位置5处我们首先想到的最简单 ...
- KMP算法-Python版
KMP算法-Python版 传统法: 从左到右一个个匹配,如果这个过程中有某个字符不匹配,就跳回去,将模式串向右移动一位.这有什么难的? 我们可以 ...
- 压缩感知重构算法之IRLS算法python实现
压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...
- 压缩感知重构算法之OLS算法python实现
压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...
- 压缩感知重构算法之CoSaMP算法python实现
压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...
- 压缩感知重构算法之IHT算法python实现
压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...
- 压缩感知重构算法之SP算法python实现
压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...
- 压缩感知重构算法之OMP算法python实现
压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...
随机推荐
- Makefile 中符合的使用
1. $@: 表示规则中的目标文件集.在模式规则中,如果有多个目标,那么,"$@"就是匹配于 目标中模式定义的集合 2. $^ : 所有的依赖目标的集合.以空格分隔.如果在依赖目 ...
- 关于同步,异步,阻塞,非阻塞,IOCP/epoll,select/poll,AIO ,NIO ,BIO的总结
相关资料 IO基本概念 Linux环境 同步异步阻塞非阻塞 同步与异步 阻塞与非阻塞 IO模型Reference Link 阻塞IO模型 非阻塞IO模型 IO复用模型 信号驱动异步IO模型 异步IO模 ...
- Java编程思想 学习笔记3
三.操作符 1.优先级 当一个表达式中存在多个操作符时,操作符的优先级就决定了各部分的计算顺序.程序员常常忘记其他优先级规则,所以应该用括号明确规定计算顺序. 当编译器观察到一个String后面紧跟着 ...
- 正方体旋转demo
接着上一篇博客的内容顺藤摸瓜往下想,既然stage有景深这个概念,可以表达3D场景,那么这个stage就可以呈现立体几何咯,于是自己写了个Cubic Demo 一个正方体有6个面,我们把一个正方体平铺 ...
- C#检测鼠标移动消息
当C#窗口上有其它控件时,窗口本身检测不到消息.1.使用WndProc.MouseMove不行,比如 protected override void WndProc(ref Message m) { ...
- axios - 基于 Promise 的 HTTP 异步请求库
axios 是基于 Promise 的 HTTP 请求客户端,可同时在浏览器和 node.js 中使用.Vue 更新到2.0之后,作者就宣告不再对 vue-resource 模块更新,而是推荐使用 a ...
- sql 中多表查询-leetcode : Combine Two Tables
因为对数据库的内容早都忘得差不多了,所以我的第一感觉是: select Person.FirstName, Person.LastName, Address.City from Person, Add ...
- Remaiten-一个以路由器和IoT设备为目标的Linux bot
Remaiten-一个以路由器和IoT设备为目标的Linux bot ESET的研究人员正在积极地检测以嵌入式系统为攻击目标的木马,受影响的有路由器,网关和无线访问点.近期,我们已经发现了一个相关的b ...
- Java读取txt文件——(二)
Txt数据
- Http协议的理解
作者技术有限,这篇博文都是结合网上的文章和自己的理解而写的,若存在错误,请无私指出,十分感谢! 协议,就是一种标准,即大家都要遵守的标准. 举个简单的例子:在中国,几乎人人都会讲普通话,不同地区的人有 ...