1.时间复杂度和空间复杂度

2.查找算法

2.1 二分查询法

2.1.1 非递归代码

def erfen(data,target):
low = 0
high = len(data) - 1
while low < high:
mid = (low + high) // 2
if data[mid] == target:
return mid
elif data[mid] < target:
low = mid + 1
else:
high = mid - 1
return

2.1.2 递归代码

def diguierfen(data,target):
low = 0
high = len(data) - 1
if low < high:
mid = (low + high) // 2
if data[mid] == target:
return mid
elif data[mid] < target:
diguierfen(data[mid+1:high],target)
else:
diguierfen(data[0:mid-1],target)
else:
return

3.排序算法

3.1 冒泡排序

def maopao(data):
length = len(data)-1
for i in range(length):
for j in range(length-i):
if data[j]>data[j+1]:
data[j],data[j+1]=data[j+1],data[j]

思路:存在n个数排序时

第1轮 n-1次

第2轮 n-2次

第n-1轮 1次

外层循环n-1次,内存循环从n-1每次减少1直到1

for i in range(length):
for j in range(length-i):

外层是从0开始到n-1,内层是从0开始,每次减少1

i=0时,表示第1轮循环,需要比较n-1次

i=1时,表示第2轮循环,需要比较n-2次

3.2 优化版的冒泡排序

def maopao(data):
length = len(data)-1
for i in range(length):
exchange = False
for j in range(length-i):
print("#")
if data[j]>data[j+1]:
data[j],data[j+1]=data[j+1],data[j]
exchange = True
if not exchange:
break

3.3 选择排序

def xuanze(data):
length = len(data) - 1
for i in range(length):
minindex = i
for j in range(i+1,length+1):
if data[minindex]>data[j]:
data[minindex],data[j] = data[j],data[minindex]

定义第一个索引为最小值,每次遍历找出最小值,每次都是和自己后面一个值比较

3.4 快速排序

4.二叉树遍历

class note:
def __init__(self,data=None,left=None,right=None):
self.data = data
self.left = left
self.right = right class Tree:
def __init__(self,root):
self.root = root def pre(self,tree):
if tree is None:
return
print(tree.data)
self.pre(tree.left)
self.pre(tree.right) def mid(self,tree):
if tree is None:
return
self.mid(tree.left)
print(tree.data)
self.mid(tree.right) def after(self,tree):
if tree is None:
return
self.after(tree.left)
self.after(tree.right)
print(tree.data) if __name__=="__main__":
# node1 = note(data=1)
# node2 = note(node1, 0, 2)
# node3 = note(data=3)
# node4 = note(data=4)
# node5 = note(node3, node4, 5)
# node6 = note(node2, node5, 6)
# node7 = note(node6, 0, 7)
# node8 = note(data=8)
# root = note(node7, node8, 100)
root = note('D',note('E'),note('F'))
# root = note('D', note('B', note('A'), note('C')), note('E', right=note('G', note('F'))))
t = Tree(root)
t.pre(t.root)
t.mid(t.root)
t.after(t.root)

分别为前中后序遍历

python-算法基础的更多相关文章

  1. Python算法基础

    一.简介 定义和特征 定义:算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制.也就是说,能够对一定规范的输入,在有限时 ...

  2. 腾讯2017年暑期实习生编程题【算法基础-字符移位】(C++,Python)

     算法基础-字符移位 时间限制:1秒 空间限制:32768K 题目: 小Q最近遇到了一个难题:把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间. 你能帮帮小Q吗? ...

  3. Python 从基础------进阶------算法 系列

    1.简介                                                                                               关 ...

  4. Python 迭代器&生成器,装饰器,递归,算法基础:二分查找、二维数组转换,正则表达式,作业:计算器开发

    本节大纲 迭代器&生成器 装饰器  基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - ...

  5. Python之算法基础

    1>递归相关: 递归:递归算法是一种直接或间接地调用自身算法的过程,在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且                   易于 ...

  6. Python之路【第二十四篇】Python算法排序一

    什么是算法 1.什么是算法 算法(algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为输出.简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果. ...

  7. 安装Python算法库

    安装Python算法库 主要包括用NumPy和SciPy来处理数据,用Matplotlib来实现数据可视化.为了适应处理大规模数据的需求,python在此基础上开发了Scikit-Learn机器学习算 ...

  8. Python算法:推导、递归和规约

    Python算法:推导.递归和规约 注:本节中我给定下面三个重要词汇的中文翻译分别是:Induction(推导).Recursion(递归)和Reduction(规约) 本节主要介绍算法设计的三个核心 ...

  9. (数据分析)第02章 Python语法基础,IPython和Jupyter Notebooks.md

    第2章 Python语法基础,IPython和Jupyter Notebooks 当我在2011年和2012年写作本书的第一版时,可用的学习Python数据分析的资源很少.这部分上是一个鸡和蛋的问题: ...

  10. Python:基础知识

    python是一种解释型.面向对象的.带有动态语义的高级程序语言. 一.下载安装 官网下载地址:https://www.python.org/downloads 下载后执行安装文件,按照默认安装顺序安 ...

随机推荐

  1. Python的进程与线程--思维导图

    Python的进程与线程--思维导图

  2. [Oracle][DATAGUARD] LOGICAL STANDBY环境里,有些SEQUENCE无法应用,导致Primary和Standby无法同期

    今天遇到了一个客户,问题是这样的,客户构筑了一个RACtoRAC的 LOGICAL STANDBY环境.并用EM在监视同期情况,发现EM页面上55115和55116这两个SEQUENCE一直在应用. ...

  3. Error "java.lang.NoClassDefFoundError:org/openxmlformats/schemas/spreadsheetml/x2006/main/CTExtensionList" in SoapUI

    After upgrade readyAPI 1.9 to the higher version, pop up error "java.lang.NoClassDefFoundError: ...

  4. 简单的OO ALV小示例

    OO ALV即面向对象ALV,是在屏幕上显示的一种可以自定义大小的ALV.它区别普通ALV的优点是可以多个ALV出现在同一个屏幕,也可以同其他屏幕元素同时出现在同一个屏幕. 示例展示: 1. 进入实用 ...

  5. C++面试笔记(1)

    1. C和C++的区别 C++面向对象的三大特性 面向对象的三个基本特征:封装.继承.多态 1.封装:把客观事物封装成抽象的类,类进行信息隐藏 关键字 |当前类 |包内 |子孙类| 包外 --|--| ...

  6. stylus导入时 报错These relative modules were not found

    These relative modules were not found: * ./star48_@2x.png in ./node_modules/_css-loader@0.28.7@css-l ...

  7. 网络-Cisco

    选择题(每题2分,共20分) 1.192.168.11.1/23的网络地址是(  A) A.192.168.10.0 B.192.168.11.0 C.192.168.10.255 D.192.168 ...

  8. 匹配URL

    使用一个不错的正则表达式来配对一个正确的url. string reg = @"(?i)(http://|https://)?(\w+\.){1,3}(com(\.cn)?|cn|net|i ...

  9. Linux~Archer 进化之路

    使用过的linux系统有:Redhat.红旗Linux.Deepin.Ubuntu.Debian.Fedora.Kali.Parrot.manjaro.Mint.Arch,最早接触linux是从200 ...

  10. 今天写代码遇到了一个BUG

    在我们日常写注释是需要注意,在有返回值的里面不要用以下方式注释,不然不会报错,运行状态码返回也是200,但就不是想要的结果. 下面举个例子 return { 'token':token, 'user_ ...