python实现折半查找和归并排序算法


Posted in Python onApril 14, 2017

今天依旧是学算法,前几天在搞bbs项目,界面也很丑,评论功能好像也有BUG。现在不搞了,得学下算法和数据结构,笔试过不了,连面试的机会都没有……

今天学了折半查找算法,折半查找是蛮简单的,但是归并排序我就挺懵比,看教材C语言写的归并排序看不懂,后来参考了别人的博客,终于搞懂了。

折半查找

先看下课本对于 折半查找的讲解。注意了,折半查找是对于有序序列而言的。每次折半,则查找区间大约缩小一半。low,high分别为查找区间的第一个下标与最后一个下标。出现low>high时,说明目标关键字在整个有序序列中不存在,查找失败。

python实现折半查找和归并排序算法

看我用python编程实现:

def BinSearch(array, key, low, high):
 mid = int((low+high)/2)
 if key == array[mid]: # 若找到
  return array[mid]
 if low > high:
  return False

 if key < array[mid]:
  return BinSearch(array, key, low, mid-1) #递归
 if key > array[mid]:
  return BinSearch(array, key, mid+1, high)



if __name__ == "__main__":
 array = [4, 13, 27, 38, 49, 49, 55, 65, 76, 97]
 ret = BinSearch(array, 76, 0, len(array)-1) # 通过折半查找,找到65
 print(ret)

输出: 在列表中查找76.

76

时间复杂度:O(logn)

归并排序算法

先阐述一下排序思路:

首先归并排序使用了二分法,归根到底的思想还是分而治之。归并排序是指把无序的待排序序列分解成若干个有序子序列,并把有序子序列合并为整体有序序列的过程。长度为1的序列是有序的。因此当分解得到的子序列长度大于1时,应继续分解,直到长度为1.

(下图是分解过程,图自python编程实现归并排序)

python实现折半查找和归并排序算法

合并的过程如下:

python实现折半查找和归并排序算法

很好,你现在可以和别人说,老子会归并排序了。但是让你写代码出来,相信你是不会的……

来来来,看我用python写的归并排序算法:

def merge_sort(array): # 递归分解
 mid = int((len(array)+1)/2)
 if len(array) == 1: # 递归结束的条件,分解到列表只有一个数据时结束
  return array
 list_left = merge_sort(array[:mid])
 list_right = merge_sort(array[mid:])
 print(">>>list_left:", list_left)
 print(">>>list_right:", list_right)
 return merge(list_left, list_right) # 进行归并


def merge(list_left, list_right): # 进行归并
 final = []
 while list_left and list_right:
  if list_left[0] <= list_right[0]: # 如果将"<="改为"<",则归并排序不稳定
   final.append(list_left.pop(0))
  else:
   final.append(list_right.pop(0))

 return final+list_left+list_right # 返回排序好的列表


if __name__=="__main__":
 array = [49, 38, 65, 97, 76]
 print(merge_sort(array))输出:

输出:

>>>list_left: [49]
>>>list_right: [38]
>>>list_left: [38, 49]
>>>list_right: [65]
>>>list_left: [97]
>>>list_right: [76]
>>>list_left: [38, 49, 65]
>>>list_right: [76, 97]
[38, 49, 65, 76, 97] 

时间度杂度: 平均情况=最好情况=最坏情况=O(nlogn)

空间复杂度: O(n)

稳定性: 稳定

对序列{ 6, 5, 3, 1, 8, 7, 2, 4 }进行归并排序的实例如下:

python实现折半查找和归并排序算法

 使用归并排序为一列数字进行排序的宏观过程:

python实现折半查找和归并排序算法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python写的一个简单DNS服务器实例
Jun 04 Python
python自动zip压缩目录的方法
Jun 28 Python
python Selenium爬取内容并存储至MySQL数据库的实现代码
Mar 16 Python
PyTorch上搭建简单神经网络实现回归和分类的示例
Apr 28 Python
python通过Windows下远程控制Linux系统
Jun 20 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
Jul 26 Python
python 使用re.search()筛选后 选取部分结果的方法
Nov 28 Python
python交易记录链的实现过程详解
Jul 03 Python
Python类的动态绑定实现原理
Mar 21 Python
使用python检查yaml配置文件是否符合要求
Apr 09 Python
Keras中的多分类损失函数用法categorical_crossentropy
Jun 11 Python
python使用dlib进行人脸检测和关键点的示例
Dec 05 Python
Python+Wordpress制作小说站
Apr 14 #Python
Python 中 list 的各项操作技巧
Apr 13 #Python
简单的python后台管理程序
Apr 13 #Python
python算法表示概念扫盲教程
Apr 13 #Python
Python常用算法学习基础教程
Apr 13 #Python
视觉直观感受若干常用排序算法
Apr 13 #Python
python常见排序算法基础教程
Apr 13 #Python
You might like
通过PHP current函数获取未知字符键名数组第一个元素的值
2013/06/24 PHP
详解PHP的Yii框架中的Controller控制器
2016/03/29 PHP
php防止sql注入的方法详解
2017/02/20 PHP
PHP 二维关联数组根据其中一个字段排序(推荐)
2017/04/04 PHP
Javascript 不能释放内存.
2006/09/07 Javascript
纯JS实现动态时间显示代码
2014/02/08 Javascript
浅析JavaScript中作用域和作用域链
2016/12/06 Javascript
JQuery.validationEngine表单验证插件(推荐)
2016/12/10 Javascript
如何快速上手Vuex
2017/02/14 Javascript
vue页面使用阿里oss上传功能的实例(二)
2017/08/09 Javascript
jQuery EasyUI 选项卡面板tabs的使用实例讲解
2017/12/25 jQuery
vue组件挂载到全局方法的示例代码
2018/08/02 Javascript
浅谈ElementUI中switch回调函数change的参数问题
2018/08/24 Javascript
React中使用UMEditor的方法示例
2019/12/27 Javascript
js和jquery判断数据类型的4种方法总结
2020/08/28 jQuery
python正则表达式match和search用法实例
2015/03/26 Python
Python反转序列的方法实例分析
2018/03/21 Python
Python实现二维曲线拟合的方法
2018/12/29 Python
ubuntu 16.04下python版本切换的方法
2019/06/14 Python
Python文件读写w+和r+区别解析
2020/03/26 Python
python 实现控制鼠标键盘
2020/11/27 Python
利用Python函数实现一个万历表完整示例
2021/01/23 Python
HTML5 Canvas自定义圆角矩形与虚线示例代码
2013/08/02 HTML / CSS
旧时光糖果:Old Time Candy
2018/02/05 全球购物
全球最大的生存食品、水和装备专用在线市场:BePrepared.com
2020/01/02 全球购物
新奥尔良珠宝:Mignon Faget
2020/11/23 全球购物
在阿联酋购买翻新手机和平板电脑:Teckzu
2021/02/12 全球购物
高二英语教学反思
2014/01/19 职场文书
暑期教师培训方案
2014/06/07 职场文书
乡镇干部个人整改措施思想汇报
2014/10/10 职场文书
2014年电工工作总结
2014/11/20 职场文书
公务员个人年终总结
2015/02/12 职场文书
上课迟到检讨书范文
2015/05/06 职场文书
运动会宣传语
2015/07/13 职场文书
医德医风学习心得体会
2016/01/25 职场文书
初二英语教学反思
2016/02/15 职场文书