Python数据结构与算法(第六天)
50.归并排序
归并排序
归并排序是采用分治法的一个非常典型的应用。归并排序的思想就是先递归分解数组,再合并数组。
将数组分解最小之后,然后合并两个有序数组,基本思路是比较两个数组的最前面的数,谁小就先取谁,取了后相应的指针就往后移一位。然后再比较,直至一个数组为空,最后把另一个数组的剩余部分复制过来即可。
def merge_sort(alist):n = len(alist)if n <=1:return alistmid = n//2left_li = merge_sort(alist[:mid])right_li = merge_sort(alist[mid:])left_pointer,right_pointer = 0, 0result = []while left_pointer < len(left_li) and right_pointer < len(right_li):if left_li[left_pointer] < right_li[right_pointer]:result.append(left_li[left_pointer])left_pointer += 1else:result.append(right_li[right_pointer])right_pointer += 1result += left_li[left_pointer:]result += right_li[right_pointer:]return resultif __name__=="__main__":li = [1,2,44,11,22,45,52,55,12,23]print(li)print(merge_sort(li))
[1, 2, 44, 11, 22, 45, 52, 55, 12, 23]
[1, 2, 11, 12, 22, 23, 44, 45, 52, 55]
51.归并排序_代码执行流程
代码执行流程
52.归并排序时间复杂度及排序算法复杂度对比
时间复杂度
- 最优时间复杂度:O(nlogn) (横向n 纵向logn)
- 最坏时间复杂度:O(nlogn)
- 稳定性:稳定
53.二分查找
搜索
搜索是在一个项目集合中找到一个特定项目的算法过程。搜索通常的答案是真的或假的,因为该项目是否存在。 搜索的几种常见方法:顺序查找、二分法查找、二叉树查找、哈希查找
二分法查找
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
def binary_search(alist, item):"""二分查找"""n = len(alist)if n > 0:mid = n//2if alist[mid] == item:return Trueelif item < alist[mid]:return binary_search(alist[:mid],item)else:return binary_search(alist[mid+1:], item)return Falseif __name__=="__main__":li=[17,20,26,31,44,54,55,77,93]print(binary_search(li,55))print(binary_search(li,100))
True
False
def binary_search(alist, item):first = 0last = len(alist) - 1while first <= last:midpoint = (first + last) // 2if alist[midpoint] == item:return Trueelif item < alist[midpoint]:last = midpoint - 1else:first = midpoint + 1return Falseif __name__=="__main__":li=[17,20,26,31,44,54,55,77,93]print(binary_search(li,55))print(binary_search(li,100))
True
False
54.二分查找时间复杂度
时间复杂度
- 最优时间复杂度:O(1)
- 最坏时间复杂度:O(logn)
Python数据结构与算法(第六天)相关推荐
- Python天天美味(32) - python数据结构与算法之堆排序
1. 选择排序 选择排序原理是先选出最小的数,与第一个数交换,然后从第二个数开始再选择最小的数与第二个数交换,-- def selection_sort(data): for i in ran ...
- python数据结构与算法13_python 数据结构与算法 (13)
python 数据结构与算法 (13) 选择排序 (Selection sort) 是? 种简单直观的排序算法. 它的? 作原理如 下.? 先在未排序序列中找到最?(?)元素, 存放到排序序列的起始位 ...
- python leetcode_leetcode 介绍和 python 数据结构与算法学习资料
for (刚入门的编程)的高中 or 大学生 leetcode 介绍 leetcode 可以说是 cs 最核心的一门"课程"了,虽然不是大学开设的,但基本上每一个现代的高水平的程序 ...
- Python数据结构与算法(二)栈和队列
本系列总结了python常用的数据结构和算法,以及一些编程实现. 参考书籍:<数据结构与算法 Python语言实现> [美]Michael T.Goodrich, Roberto Tama ...
- Python数据结构与算法(一)列表和元组
本系列总结了python常用的数据结构和算法,以及一些编程实现. 参考书籍:<数据结构与算法 Python语言实现> [美]Michael T.Goodrich, Roberto Tama ...
- Python 数据结构与算法——快排
Python 数据结构与算法--选取算法(TopK) 如果说快速选取法所代表的是剪枝式的遍历操作--在递归树中找出一条通往第 k<script type="math/tex" ...
- Python 数据结构与算法——从二分图到寻找最大排列(Maximum Permutation)
假设现在有 8 位有着特殊癖好的人去买票看电影,其中有一部分人得到了自己喜欢的座位,但大多数人并不满意.现在的问题是,如果这些人各自都有自己喜欢的座位(喜欢的座位有重叠,这是进行最大排列的前提,否则无 ...
- Python数据结构与算法(4.1)——递归
Python数据结构与算法(4.1)--递归 0. 学习目标 1 递归 1.1 递归的基本概念 1.2 递归的重要性 1.3 递归三原则 1.4 递归的应用 2 递归示例 2.1 列表求和 2.2 汉 ...
- Python数据结构与算法(3.5)——双端队列
Python数据结构与算法(3.5)--双端队列 0. 学习目标 1. 双端队列的基本概念 1.1 双端队列的基本概念 1.2 双端队列抽象数据类型 2. 双端队列的实现 2.1 顺序双端队列的实现 ...
- Python数据结构与算法(3.1)——栈
Python数据结构与算法(3.1)--栈 0. 学习目标 1. 栈的基本概念 1.1 栈的基本概念 1.2 栈抽象数据类型 1.3 栈的应用场景 2. 栈的实现 2.1 顺序栈的实现 2.2 链栈的 ...
最新文章
- AngularJs+bootstrap搭载前台框架——准备工作
- JS一定要放在Body的最底部么?
- 07年末围炉盛宴 - 信息工作者应用与管理系列Webcast
- geteditor p 取消自动_2020百度网盘超级会员怎么取消自动续费?
- c++和python有联系吗_Python和C++交互
- Qt学习笔记-http服务的初步认识(使用程序下载网站上的图片)
- 在J2ME和WAP中实现电话呼叫功能
- ms Sql server 中的getDate()函数使用方法总结
- Spark核心编程原理
- 西门子plc软件 linux,西门子PLC编程软件
- 自制固件iOS4.1刷机、解锁教程
- 华为手机怎么设置字体?
- MATLAB--数字图像处理 频域图像分析
- 1092 : 素数表(函数专题)
- Linux修改MySQL数据库密码
- LFLT1000 流量计密封性自动化测试系统
- 【笔记本触摸屏】实用技巧整理
- Android - 屏幕适配
- 25 个精美的手机网站模板
- 产品经理学习-加分技能
热门文章
- cath数据库fasta备注_数据库(同源)搜索软件 FASTA 和 BLAST
- iphone x屏幕尺寸_苹果公布 iPhone 12/12 Pro 屏幕更换价格,网友:碎不起!
- vspy如何在图形面板显示报文_触想激光切割解决方案中嵌入式工业触控显示器有何优势?...
- Java中对象的实例化顺序
- 动态规划--编辑距离问题
- Android:Margin和Padding
- hbase把表删除后又新建该表提示表已存在,解决方案
- 验证码的产生 python
- 线性代数笔记:Khatri-Rao积
- 李宏毅线性代数笔记13:SVD分解