Python实现七个基本算法的实例代码


Posted in Python onOctober 08, 2020

1.顺序查找

当数据存储在诸如列表的集合中时,我们说这些数据具有线性或顺序关系。 每个数据元素都存储在相对于其他数据元素的位置。 由于这些索引值是有序的,我们可以按顺序访问它们。 这个过程产实现的搜索即为顺序查找。

顺序查找原理剖析:从列表中的第一个元素开始,我们按照基本的顺序排序,简单地从一个元素移动到另一个元素,直到找到我们正在寻找的元素或遍历完整个列表。如果我们遍历完整个列表,则说明正在搜索的元素不存在。

代码实现:该函数需要一个列表和我们正在寻找的元素作为参数,并返回一个是否存在的布尔值。found 布尔变量初始化为 False,如果我们发现列表中的元素,则赋值为 True。

def search(alist,item):
 find = False
 cur = 0
 while cur < len(alist):
 if alist[cur] == item:
  find = True
  break
 else:
  cur += 1
 return find

2.二分查找

有序列表对于我们的实现搜索是很有用的。在顺序查找中,当我们与第一个元素进行比较时,如果第一个元素不是我们要查找的,则最多还有 n-1 个元素需要进行比较。

二分查找则是从中间元素开始,而不是按顺序查找列表。 如果该元素是我们正在寻找的元素,我们就完成了查找。 如果它不是,我们可以使用列表的有序性质来消除剩余元素的一半。

如果我们正在查找的元素大于中间元素,就可以消除中间元素以及比中间元素小的一半元素。如果该元素在列表中,肯定在大的那半部分。然后我们可以用大的半部分重复该过程,继续从中间元素开始,将其与我们正在寻找的内容进行比较。

def search(alist,item):
 left = 0
 right = len(alist) - 1
 find = False

 while left <= right:
 mid_index = (left + right)//2
 if item == alist[mid_index]:
  find = True
  break
 else:
  if item > alist[mid_index]:
  left = mid_index + 1
  else:
  right = mid_index -1

 return find

3.冒泡排序

原理:

比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

Python实现七个基本算法的实例代码

def sort(alist):
 length = len(alist)
 for i in range(0,length-1):
  for j in range(0,length-1-i):
  if alist[i] > alist[i+1]:
   alist[i],alist[i+1] = alist[i+1],alist[i]

4.选择排序

工作原理:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。

Python实现七个基本算法的实例代码

def sort(alist):
 length = len(alist)
 for j in range(length-1,0,-1):
 max_index = 0
 for i in range(1,j+1):
  if alist[max_index] < alist[i]:
  max_index = i
 alist[max_index],alist[j] = alist[j],alist[max_index]

5.插入排序

原理:

基本思想是,每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。关键码是数据元素中某个数据项的值,用它可以标示一个数据元素。

Python实现七个基本算法的实例代码

def sort(alist):
 length = len(alist)
 for j in range(1,length):
 i = j
 while i > 0:
  if alist[i] < alist[i-1]:
  alist[i],alist[i-1] = alist[i-1],alist[i]
  i -= 1
  else:
  break

希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。

该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量(gap)”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率比直接插入排序有较大提高。

def sort(alist):
 gap = len(alist)//2
 while gap >= 1:
 for j in range(gap,len(alist)):
  i = j
  while i > 0:
  if alist[i] < alist[i-gap]:
   alist[i],alist[i-gap] = alist[i-gap],alist[i]
   i -= gap
  else:
   break
 gap = gap // 2

6.快速排序

基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

Python实现七个基本算法的实例代码

def sort(alist,start,end):
 low = start
 high = end
 if low >= high:
 return
 mid = alist[low]
 while low < high:
 while low < high:
  if alist[high] >= mid:
  high -= 1
  else:
  alist[low] = alist[high]
  break
 while low < high:
  if alist[low] < mid:
  low += 1
  else:
  alist[high] = alist[low]
  break
 alist[low] = mid
 sort(alist,start,low-1)
 sort(alist,high+1,end)

7.归并排序

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。

Python实现七个基本算法的实例代码

def merge_sort(alist):
 n = len(alist)
 #结束递归的条件
 if n <= 1:
 return alist
 #中间索引
 mid = n//2

 left_li = merge_sort(alist[:mid])
 right_li = merge_sort(alist[mid:])

 #指向左右表中第一个元素的指针
 left_pointer,right_pointer = 0,0
 #合并数据对应的列表:该表中存储的为排序后的数据
 result = []
 while left_pointer < len(left_li) and right_pointer < len(right_li):
 #比较最小集合中的元素,将最小元素添加到result列表中
 if left_li[left_pointer] < right_li[right_pointer]:
  result.append(left_li[left_pointer])
  left_pointer += 1
 else:
  result.append(right_li[right_pointer])
  right_pointer += 1
 #当左右表的某一个表的指针偏移到末尾的时候,比较大小结束,将另一张表中的数据(有序)添加到result中
 result += left_li[left_pointer:]
 result += right_li[right_pointer:]

 return result

alist = [3,8,5,7,6]
print(merge_sort(alist))

8.各个算法的时间复杂度

Python实现七个基本算法的实例代码

到此这篇关于Python实现七个基本算法的实例代码的文章就介绍到这了,更多相关Python基本算法内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python用reduce和map把字符串转为数字的方法
Dec 19 Python
详解Python判定IP地址合法性的三种方法
Mar 06 Python
使用Python的Django和layim实现即时通讯的方法
May 25 Python
在matplotlib的图中设置中文标签的方法
Dec 13 Python
详解pandas库pd.read_excel操作读取excel文件参数整理与实例
Feb 17 Python
python实现飞机大战游戏
Oct 26 Python
python 字符串常用方法汇总详解
Sep 16 Python
numpy.ndarray 实现对特定行或列取值
Dec 05 Python
Django接收照片储存文件的实例代码
Mar 07 Python
Python如何用wx模块创建文本编辑器
Jun 07 Python
Python Matplotlib绘图基础知识代码解析
Aug 31 Python
详解Scrapy Redis入门实战
Nov 18 Python
python自动化测试三部曲之request+django实现接口测试
Oct 07 #Python
python自动化测试三部曲之unittest框架的实现
Oct 07 #Python
浅谈anaconda python 版本对应关系
Oct 07 #Python
简述python&amp;pytorch 随机种子的实现
Oct 07 #Python
详解基于python的全局与局部序列比对的实现(DNA)
Oct 07 #Python
python单元测试框架pytest的使用示例
Oct 07 #Python
利用python批量爬取百度任意类别的图片的实现方法
Oct 07 #Python
You might like
DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
2011/11/21 PHP
ThinkPHP之A方法实例讲解
2014/06/20 PHP
php简单统计字符串单词数量的方法
2015/06/19 PHP
PHP面向对象程序设计实例分析
2016/01/26 PHP
非常经典的PHP文件上传类分享
2016/05/15 PHP
基于php实现的php代码加密解密类完整实例
2016/10/12 PHP
PHP针对伪静态的注入总结【附asp与Python相关代码】
2017/08/01 PHP
jQuery(1.3.2) 7行代码搞定跟随屏幕滚动的层
2009/05/21 Javascript
javascript获取当前日期时间及其它操作函数
2011/01/11 Javascript
JQuery扩展插件Validate 1 基本使用方法并打包下载
2011/09/05 Javascript
JS判断页面加载状态以及添加遮罩和缓冲动画的代码
2012/10/11 Javascript
css3元素简单的闪烁效果实现(html5 jquery)
2013/12/28 Javascript
js实现特定位取反原理及示例
2014/06/30 Javascript
node.js中的http.response.write方法使用说明
2014/12/14 Javascript
jquery获取复选框checkbox的值实现方法
2016/05/30 Javascript
JS区分Object与Aarry的六种方法总结
2017/02/27 Javascript
Javascript 实现匿名递归的实例代码
2017/05/25 Javascript
基于javaScript的this指向总结
2017/07/22 Javascript
jQuery简单判断值是否存在于数组中的方法示例
2018/04/17 jQuery
浅谈微信小程序列表埋点曝光指南
2019/10/15 Javascript
Vue 数组和对象更新,但是页面没有刷新的解决方式
2019/11/09 Javascript
Vue-axios-post数据后端接不到问题解决
2020/01/09 Javascript
jQuery实现回到顶部效果
2020/10/19 jQuery
[26:50]2018完美盛典DOTA2表演赛
2018/12/17 DOTA
Python使用百度API上传文件到百度网盘代码分享
2014/11/08 Python
python实现决策树ID3算法的示例代码
2018/05/30 Python
Django框架搭建的简易图书信息网站案例
2019/05/25 Python
Python多线程多进程实例对比解析
2020/03/12 Python
python输出数学符号实例
2020/05/11 Python
python中format函数如何使用
2020/06/22 Python
Mio Skincare美国官网:身体紧致及孕期身体护理
2017/03/05 全球购物
wedgwood加拿大官网:1759年成立的英国国宝级陶瓷餐具品牌
2018/07/17 全球购物
爱护公共设施演讲稿
2014/09/13 职场文书
2014年财务个人工作总结
2014/12/08 职场文书
2016年党员学习廉政准则心得体会
2016/01/20 职场文书
CSS3实现的3D隧道效果
2021/04/27 HTML / CSS