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数据结构与算法(第六天)相关推荐

  1. Python天天美味(32) - python数据结构与算法之堆排序

    1. 选择排序 选择排序原理是先选出最小的数,与第一个数交换,然后从第二个数开始再选择最小的数与第二个数交换,-- def selection_sort(data):     for i in ran ...

  2. python数据结构与算法13_python 数据结构与算法 (13)

    python 数据结构与算法 (13) 选择排序 (Selection sort) 是? 种简单直观的排序算法. 它的? 作原理如 下.? 先在未排序序列中找到最?(?)元素, 存放到排序序列的起始位 ...

  3. python leetcode_leetcode 介绍和 python 数据结构与算法学习资料

    for (刚入门的编程)的高中 or 大学生 leetcode 介绍 leetcode 可以说是 cs 最核心的一门"课程"了,虽然不是大学开设的,但基本上每一个现代的高水平的程序 ...

  4. Python数据结构与算法(二)栈和队列

    本系列总结了python常用的数据结构和算法,以及一些编程实现. 参考书籍:<数据结构与算法 Python语言实现> [美]Michael T.Goodrich, Roberto Tama ...

  5. Python数据结构与算法(一)列表和元组

    本系列总结了python常用的数据结构和算法,以及一些编程实现. 参考书籍:<数据结构与算法 Python语言实现> [美]Michael T.Goodrich, Roberto Tama ...

  6. Python 数据结构与算法——快排

    Python 数据结构与算法--选取算法(TopK) 如果说快速选取法所代表的是剪枝式的遍历操作--在递归树中找出一条通往第 k<script type="math/tex" ...

  7. Python 数据结构与算法——从二分图到寻找最大排列(Maximum Permutation)

    假设现在有 8 位有着特殊癖好的人去买票看电影,其中有一部分人得到了自己喜欢的座位,但大多数人并不满意.现在的问题是,如果这些人各自都有自己喜欢的座位(喜欢的座位有重叠,这是进行最大排列的前提,否则无 ...

  8. Python数据结构与算法(4.1)——递归

    Python数据结构与算法(4.1)--递归 0. 学习目标 1 递归 1.1 递归的基本概念 1.2 递归的重要性 1.3 递归三原则 1.4 递归的应用 2 递归示例 2.1 列表求和 2.2 汉 ...

  9. Python数据结构与算法(3.5)——双端队列

    Python数据结构与算法(3.5)--双端队列 0. 学习目标 1. 双端队列的基本概念 1.1 双端队列的基本概念 1.2 双端队列抽象数据类型 2. 双端队列的实现 2.1 顺序双端队列的实现 ...

  10. Python数据结构与算法(3.1)——栈

    Python数据结构与算法(3.1)--栈 0. 学习目标 1. 栈的基本概念 1.1 栈的基本概念 1.2 栈抽象数据类型 1.3 栈的应用场景 2. 栈的实现 2.1 顺序栈的实现 2.2 链栈的 ...

最新文章

  1. AngularJs+bootstrap搭载前台框架——准备工作
  2. JS一定要放在Body的最底部么?
  3. 07年末围炉盛宴 - 信息工作者应用与管理系列Webcast
  4. geteditor p 取消自动_2020百度网盘超级会员怎么取消自动续费?
  5. c++和python有联系吗_Python和C++交互
  6. Qt学习笔记-http服务的初步认识(使用程序下载网站上的图片)
  7. 在J2ME和WAP中实现电话呼叫功能
  8. ms Sql server 中的getDate()函数使用方法总结
  9. Spark核心编程原理
  10. 西门子plc软件 linux,西门子PLC编程软件
  11. 自制固件iOS4.1刷机、解锁教程
  12. 华为手机怎么设置字体?
  13. MATLAB--数字图像处理 频域图像分析
  14. 1092 : 素数表(函数专题)
  15. Linux修改MySQL数据库密码
  16. LFLT1000 流量计密封性自动化测试系统
  17. 【笔记本触摸屏】实用技巧整理
  18. Android - 屏幕适配
  19. 25 个精美的手机网站模板
  20. 产品经理学习-加分技能

热门文章

  1. cath数据库fasta备注_数据库(同源)搜索软件 FASTA 和 BLAST
  2. iphone x屏幕尺寸_苹果公布 iPhone 12/12 Pro 屏幕更换价格,网友:碎不起!
  3. vspy如何在图形面板显示报文_触想激光切割解决方案中嵌入式工业触控显示器有何优势?...
  4. Java中对象的实例化顺序
  5. 动态规划--编辑距离问题
  6. Android:Margin和Padding
  7. hbase把表删除后又新建该表提示表已存在,解决方案
  8. 验证码的产生 python
  9. 线性代数笔记:Khatri-Rao积
  10. 李宏毅线性代数笔记13:SVD分解