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 字符串操作方法大全
Mar 11 Python
python魔法方法-属性访问控制详解
Jul 25 Python
Python使用SQLite和Excel操作进行数据分析
Jan 20 Python
Python实现简单求解给定整数的质因数算法示例
Mar 25 Python
Python查找两个有序列表中位数的方法【基于归并算法】
Apr 20 Python
Python 音频生成器的实现示例
Dec 24 Python
Pytorch Tensor的统计属性实例讲解
Dec 30 Python
如何解决tensorflow恢复模型的特定值时出错
Feb 06 Python
基于Python下载网络图片方法汇总代码实例
Jun 24 Python
如何解决安装python3.6.1失败
Jul 01 Python
详细分析Python可变对象和不可变对象
Jul 09 Python
Python 微信公众号文章爬取的示例代码
Nov 30 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
PHP整合PayPal支付
2015/06/11 PHP
javascript 客户端验证上传图片的大小(兼容IE和火狐)
2009/08/15 Javascript
offsetParent 算法分析
2010/04/05 Javascript
jquery插件jSignature实现手动签名
2015/05/04 Javascript
jQuery实现高亮显示网页关键词的方法
2015/08/07 Javascript
javascript模拟C#格式化字符串
2015/08/26 Javascript
简单谈谈JS数组中的indexOf方法
2016/10/13 Javascript
Three.js加载外部模型的教程详解
2017/11/10 Javascript
JavaScript实现封闭区域布尔运算的示例代码
2018/06/25 Javascript
jQuery层叠选择器用法实例分析
2019/06/28 jQuery
React中使用Vditor自定义图片详解
2020/12/25 Javascript
python实现bitmap数据结构详解
2014/02/17 Python
使用python实现正则匹配检索远端FTP目录下的文件
2015/03/25 Python
python链接Oracle数据库的方法
2015/06/28 Python
tensorflow中next_batch的具体使用
2018/02/02 Python
pytorch permute维度转换方法
2018/12/14 Python
python 实现返回一个列表中出现次数最多的元素方法
2019/06/11 Python
python实现简单成绩录入系统
2019/09/19 Python
Python3 shutil(高级文件操作模块)实例用法总结
2020/02/19 Python
Python模拟登入的N种方式(建议收藏)
2020/05/31 Python
html5使用canvas实现图片下载功能的示例代码
2017/08/26 HTML / CSS
Bobbi Brown芭比波朗美国官网:化妆师专业彩妆保养品品牌
2016/08/18 全球购物
美国高端婴童品牌:Hanna Andersson
2016/10/30 全球购物
Three Graces London官网:英国奢侈品牌
2021/03/18 全球购物
OnePlus加拿大官网:中国国际化手机品牌
2020/10/13 全球购物
Ibatis中如何提高SQL Map的性能
2013/05/11 面试题
能否解释一下XSS cookie盗窃是什么意思
2012/06/02 面试题
值传递还是引用传递
2015/02/08 面试题
中学家长会邀请函
2014/01/17 职场文书
五星级酒店餐饮部总监的标准岗位职责
2014/02/17 职场文书
企业元宵节主持词
2014/03/25 职场文书
读书伴我成长演讲稿
2014/05/07 职场文书
物业管理专业自荐信
2014/07/01 职场文书
离婚协议书包括哪些内容
2014/10/16 职场文书
再见,2019我们不负使命;你好,2020我们砥砺前行
2020/01/03 职场文书
Python中第三方库Faker的使用详解
2022/04/02 Python