• 01 算法基本概念与递归;

  • 02 二分查找与LOW B三人组

  • 03 快速排序

  • 04 归并排序

01 算法基本概念与递归;

1.1 算法概念

1.2 复习:递归

1.3 时间复杂度

1.4 空间复杂度

1.5 递归

def func3(n):
if n > 0:
func3(n - 1)
print(n) func3(5) def text(n):
if n > 0:
print('抱着', end='')
text(n - 1)
print('的我', end='')
else:
print("我的小鲤鱼", end='') text(5) # 汉诺塔问题
def hanoi(n, A, B, C):
if n >0:
# n个盘子从A经过B移动到C;
hanoi(n - 1, A, C, B)
print("%s->%s" % (A, C))
hanoi(n - 1, B, A, C) hanoi(3, "A", "B", "C")

1.6 汉诺塔问题(递归的经典)

02 二分查找与LOW B三人组

2.1 列表查找;

2.2  顺序查找;

2.3 二分查找(本身有序);

import time

def cal_time(func):
def wrapper(*args, **kwargs):
t1 = time.time()
result = func(*args, **kwargs)
t2 = time.time()
print("%s running time:%s secs." % (func.__name__, t2 - t1))
return result return wrapper # 线性查找;
@cal_time
def binary_search(li, val):
low = 0
high = len(li) - 1 while low <= high:
mid = (low + high) // 2
if li[mid] > val:
high = mid - 1
elif li[mid] < val:
low = mid + 1
else:
return mid
else:
return None # 二分查找;
@cal_time
def linear_search(li, val):
try:
i = li.index(val)
return i
except:
return None li = list(range(0, 100000000, 2))
times = binary_search(li, 9000006)
print(times)
times1 = linear_search(li, 9000006)
print(times1)

2.4 列表排序;

  2.4.1 列表排序

  • 将无序列表变成有序列表

  2.4.2 应用场景

  • 各种榜单
  • 各种表格
  • 给二分查找使用
  • 给其他算法使用

  2.4.3 输入:无序列表

  2.4.4 输出:有序列表

  2.4.5 升序与降序

  2.4.6 排序LOW B 三人组

  • 冒泡排序
  • 选择排序
  • 插入排序

  2.4.7 排序NB三人组

  • 快速排序
  • 堆排序
  • 归并排序

  2.4.8 没什么人用的排序

  • 基数排序
  • 希尔排序
  • 桶排序
  • 计数排序

  2.4.9 算法关键点

  • 有序区域
  • 无序区域
  • 冒泡算法优化思路——如果冒泡排序中执行一趟而没有交换,则列表已经是有序的状态,可以直接结束算法;

buddle_sort.py;

from cal_time import cal_time

@cal_time
def buddle_sort(li):
for i in range(0, len(li) - 1):
# i 是表示第i趟,此时有序区有i个数;
for j in range(0, len(li) - i - 1):
if li[j] > li[j + 1]:
li[j], li[j + 1] = li[j + 1], li[j] import random li = list(range(10000))
random.shuffle(li)
buddle_sort(li)
print(li)

二分查找优化算法:

buddle_sort_opt.py;

from cal_time import cal_time

@cal_time
def buddle_sort(li):
for i in range(0, len(li) - 1):
exchange = False
# i 是表示第i趟,此时有序区有i个数;
for j in range(0, len(li) - i - 1):
if li[j] > li[j + 1]:
li[j], li[j + 1] = li[j + 1], li[j]
exchange = True
if not exchange:
return import random li = list(range(10000))
# random.shuffle(li)
buddle_sort(li)
print(li)

cal_time.py;

import time

def cal_time(func):
def wrapper(*args, **kwargs):
t1 = time.time()
result = func(*args, **kwargs)
t2 = time.time()
print("%s running time:%s secs." % (func.__name__, t2 - t1))
return result return wrapper

2.5 选择排序思路

  • 代码关键点——无序区域、最小数的位置;

2.6 插入排序;

03 快速排序

04 堆排序

05 归并排序

Python-S9-Day128——算法基础Algorithm的更多相关文章

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

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

  2. Python算法基础

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

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

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

  4. Python之算法基础

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

  5. Python数据结构与算法--算法分析

    在计算机科学中,算法分析(Analysis of algorithm)是分析执行一个给定算法需要消耗的计算资源数量(例如计算时间,存储器使用等)的过程.算法的效率或复杂度在理论上表示为一个函数.其定义 ...

  6. python数据结构与算法

    最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的<啊哈算法>入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...

  7. Python数据结构与算法--List和Dictionaries

    Lists 当实现 list 的数据结构的时候Python 的设计者有很多的选择. 每一个选择都有可能影响着 list 操作执行的快慢. 当然他们也试图优化一些不常见的操作. 但是当权衡的时候,它们还 ...

  8. python 小白(无编程基础,无计算机基础)的开发之路 day1

    本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语 ...

  9. 解读Raft(一 算法基础)

    最近工作中讨论到了Raft协议相关的一些问题,正好之前读过多次Raft协议的那paper,所以趁着讨论做一次总结整理. 我会将Raft协议拆成四个部分去总结: 算法基础 选举和日志复制 安全性 节点变 ...

随机推荐

  1. sql server 索引总结一

    一.存储结构 在SQL Server中,有许多不同的可用排列规则选项. 二进制:按字符的数字表示形式排序(ASCII码中,用数字32表示空格,用68表示字母"D").因为所有内容都 ...

  2. A011 Activiti工作流程开发的一些统一规则和实现原理(完整版)

    注意:以下规则是我为了规范流程的处理过程,不是Activiti公司的官方规定. 1.流程启动需要设置启动者,在Demo程序中,“启动者变量”名统一设置为initUserId 启动时要做的: ident ...

  3. oracle 11g r2卸载

    1. 进入计算机管理>>服务里,停止所有oracle的服务 2. 开始菜单>>程序>>Oracle>>Oracle安装产品>>Univers ...

  4. IOS 模仿有storyboard的项目控制器的创建

    ● 先加载storyboard文件(Test是storyboard的文件名) UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@ ...

  5. innobackupex 全备、增备脚本

    全备脚本:innobackupex --defaults-file=/etc/my.cnf --user root --password mypasswd /mydata/fullbak/ 增备脚本: ...

  6. 从用户访问网站流程开始,细说web网络基础

    1.用户访问网站流程框架 2.dns解析原理 3.tcp/ip三次握手过程原理,11种连接状态 4.tcp/ip四次挥手过程原理,11种连接状态 5.http协议原理(www服务的请求过程)请求细节, ...

  7. python脚本执行报错:SyntaxError: Non-ASCII character '\xe6' in file ip.py on line 4...

    报错信息 [root@chenbj ~]# python ip.py 192.168.1.1 File "ip.py", line 4 SyntaxError: Non-ASCII ...

  8. 使用dotnet-dump 查找 .net core 3.0 占用CPU 100%的原因

    公司的产品一直紧跟 .net core 3.0 preview 不断升级, 部署到 Linux 服务器后, 偶尔会出现某个进程CPU占用100%. 由于服务部署在云上, 不能使用远程调试; 在局域网内 ...

  9. 【转】 bind1st bind2nd的使用

    以前在使用stl的过程中发现bind1st和bind2nd这两个函数,当时不太理解什么意思,今天在网上查了一下相关资料发现竟然很简单,下面我就具体解释一下他们的用法. bind1st和bind2nd函 ...

  10. Linux Shell 几个特殊符号命令 & 、&& 、 ||

    & 放在启动参数后面表示设置此进程为后台进程 默认情况下,进程是前台进程,这时就把Shell给占据了,我们无法进行其他操作,对于那些没有交互的进程,很多时候,我们希望将其在后台启动,可以在启动 ...