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 返回汉字的汉语拼音
Feb 27 Python
测试、预发布后用python检测网页是否有日常链接
Jun 03 Python
Python中map和列表推导效率比较实例分析
Jun 17 Python
详解Python中的Descriptor描述符类
Jun 14 Python
Python错误处理操作示例
Jul 18 Python
python 异或加密字符串的实例
Oct 14 Python
python查看模块安装位置的方法
Oct 16 Python
Python基础之函数的定义与使用示例
Mar 23 Python
python两个_多个字典合并相加的实例代码
Dec 26 Python
Python生成器实现简单&quot;生产者消费者&quot;模型代码实例
Mar 27 Python
python如何变换环境
Jul 21 Python
Python 实现集合Set的示例
Dec 21 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
ftp类(example.php)
2006/10/09 PHP
Fatal error: Call to undefined function curl_init()解决方法
2010/04/09 PHP
浅析51个PHP处理字符串的函数
2013/08/02 PHP
PHP数据库万能引擎类adodb配置使用以及实例集锦
2014/06/12 PHP
php使用百度ping服务代码实例
2014/06/19 PHP
yii2中的rules 自定义验证规则详解
2016/04/19 PHP
PHP设计模式之单例模式定义与用法分析
2019/03/26 PHP
BOOM vs RR BO3 第一场2.13
2021/03/10 DOTA
用Javascript实现UTF8编码转换成gb2312编码
2006/12/22 Javascript
Javascript实现真实字符串剩余字数提示的实例代码
2013/10/22 Javascript
node.js中的path.delimiter方法使用说明
2014/12/09 Javascript
js实现表单Radio切换效果的方法
2015/08/17 Javascript
浅析AngularJS Filter用法
2015/12/28 Javascript
JS调用打印机功能简单示例
2016/11/28 Javascript
AngularJs上传前预览图片的实例代码
2017/01/20 Javascript
javascript获取以及设置光标位置
2017/02/16 Javascript
vue组件间通信解析
2017/03/01 Javascript
基于JavaScript实现的希尔排序算法分析
2017/04/14 Javascript
bootstrap modal+gridview实现弹出框效果
2017/08/15 Javascript
vue+vue-validator 表单验证功能的实现代码
2017/11/13 Javascript
Angularjs 根据一个select的值去设置另一个select的值方法
2018/08/13 Javascript
Vue中Table组件Select的勾选和取消勾选事件详解
2019/03/19 Javascript
简谈创建React Component的几种方式
2019/06/15 Javascript
Vue的路由及路由钩子函数的实现
2019/07/02 Javascript
jQuery cookie的公共方法封装和使用示例
2020/06/01 jQuery
[01:27:43]VGJ.S vs TNC Supermajor 败者组 BO3 第三场 6.6
2018/06/07 DOTA
python使用多线程不断刷新网页的方法
2015/03/31 Python
关于Python 3中print函数的换行详解
2017/08/08 Python
Python实现自动为照片添加日期并分类的方法
2017/09/30 Python
python高阶爬虫实战分析
2018/07/29 Python
pycharm访问mysql数据库的方法步骤
2019/06/18 Python
简单了解python的一些位运算技巧
2019/07/13 Python
使用css3制作动感导航条示例
2014/01/26 HTML / CSS
详解CSS中iconfont的使用
2015/08/04 HTML / CSS
大学生党员自我批评思想汇报
2014/10/10 职场文书
MySQL学习之基础命令实操总结
2022/03/19 MySQL