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实现得到一个给定类的虚函数
Sep 28 Python
Python中比较特别的除法运算和幂运算介绍
Apr 05 Python
Python处理JSON时的值报错及编码报错的两则解决实录
Jun 26 Python
基于Python闭包及其作用域详解
Aug 28 Python
Python实现判断一行代码是否为注释的方法
May 23 Python
用Python将一个列表分割成小列表的实例讲解
Jul 02 Python
如何通过50行Python代码获取公众号全部文章
Jul 12 Python
pycharm创建scrapy项目教程及遇到的坑解析
Aug 15 Python
Python使用字典实现的简单记事本功能示例
Aug 15 Python
Tensorflow中的图(tf.Graph)和会话(tf.Session)的实现
Apr 22 Python
keras绘制acc和loss曲线图实例
Jun 15 Python
Pandas中DataFrame交换列顺序的方法实现
Dec 14 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
Wordpress 相册插件 NextGEN-Gallery 添加目录将中文转为拼音的解决办法
2010/12/29 PHP
php实现html标签闭合检测与修复方法
2015/07/09 PHP
使用php实现网站验证码功能【推荐】
2017/02/09 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
php异常处理捕获错误整理
2019/09/23 PHP
jquery checkbox,radio是否选中的判断代码
2010/03/20 Javascript
纯JAVASCRIPT图表动画插件Highcharts Examples
2011/04/16 Javascript
变量声明时命名与变量作为对象属性时命名的区别解析
2013/12/06 Javascript
一个JavaScript用逗号分割字符串实例
2014/09/22 Javascript
网页中表单按回车就自动提交的问题的解决方案
2014/11/03 Javascript
jQuery/CSS3图片特效插件整理推荐
2014/12/07 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
2015/03/26 Javascript
详解Html a标签中href和onclick用法、区别、优先级别
2017/01/16 Javascript
ES6中Array.find()和findIndex()函数的用法详解
2017/09/16 Javascript
webpack项目调试以及独立打包配置文件的方法
2018/02/28 Javascript
setTimeout与setInterval的区别浅析
2019/03/23 Javascript
[03:57]2016完美“圣”典风云人物:rOtk专访
2016/12/09 DOTA
python实现从字符串中找出字符1的位置以及个数的方法
2014/08/25 Python
详解在Python程序中解析并修改XML内容的方法
2015/11/16 Python
Python文本相似性计算之编辑距离详解
2016/11/28 Python
python批量设置多个Excel文件页眉页脚的脚本
2018/03/14 Python
利用Python在一个文件的头部插入数据的实例
2018/05/02 Python
对python tkinter窗口弹出置顶的方法详解
2019/06/14 Python
jupyter notebook中美观显示矩阵实例
2020/04/17 Python
Python 整行读取文本方法并去掉readlines换行\n操作
2020/09/03 Python
Spartoo芬兰:欧洲最大的网上鞋店
2016/08/28 全球购物
高中生学习的自我评价
2013/12/14 职场文书
小区停车场管理制度
2014/01/27 职场文书
2015届大学生就业推荐表自我评价
2014/09/27 职场文书
服务整改报告
2014/11/06 职场文书
2015商场元旦促销活动策划方案
2014/12/09 职场文书
2015年妇幼保健工作总结
2015/05/19 职场文书
风之谷观后感
2015/06/11 职场文书
导游词之黄果树瀑布
2019/09/20 职场文书
祝福语集锦:给满月宝宝的祝福语
2019/11/20 职场文书
十大最强水系宝可梦,最美宝可梦排第三,榜首大家最熟悉
2022/03/18 日漫