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 个元素需要进行比较。

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

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

#Python学习交流群:778463939

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.冒泡排序

原理:

比较相邻的元素。如果第一个比第二个大,就交换他们两个。

对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

针对所有的元素重复以上的步骤,除了最后一个。

持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

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学习交流群:778463939

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.插入排序

原理:

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

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学习交流群:778463939

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)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。

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实现七个基本算法相关推荐

  1. python算法实现源码_python 实现A_算法的示例代码

    python 实现A_算法的示例代码 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  python 实现A_算法的示例代码.txt ] (友情提示:右键点上行txt ...

  2. python关键词提取源码_Python 结巴分词 关键词抽取分析

    关键词抽取就是从文本里面把跟这篇文档意义最相关的一些词抽取出来.这个可以追溯到文献检索初期,当时还不支持全文搜索的时候,关键词就可以作为搜索这篇论文的词语.因此,目前依然可以在论文中看到关键词这一项. ...

  3. python人脸识别源码_Python 抖音机器人,让你找到漂亮小姐姐

    本项目作者沉迷于抖音无法自拔,常常花好几个小时在抖音漂亮小姐姐身上. 本着高效.直接地找到漂亮小姐姐的核心思想,我用 Python + ADB 做了一个 Python 抖音机器人 Douyin-Bot ...

  4. python贪吃蛇源码_Python:游戏:贪吃蛇(附源码)

    Python:游戏:贪吃蛇(附源码) 发布时间:2018-09-05 09:59, 浏览次数:1295 , 标签: Python 贪吃蛇是个非常简单的游戏,适合练手. 首先分析一下这个游戏 1.蛇怎么 ...

  5. python字符串替换源码_Python实现字符串中某个字母的替代功能

    Python实现字符串中某个字母的替代功能 今晚想实现这样一个功能:将输入字符串中的字母 "i" 变成字母 "p".当时想的很简单,直接用for循环遍历,然后替 ...

  6. python关键字提取源码_python实现按关键字筛选日志文件

    最近忙成了狗,五六个项目堆在一起,头疼的是测试还失惊无神的给我丢来一个几十甚至上百M的日志文件,动不动就几十上百万行,就算是搜索也看得头昏眼花的,因此自己花了点时间写了一段小脚本去过滤日志,当然这样的 ...

  7. python量化策略源码_Python量化交易进阶讲堂-创建自定义量化回测框架

    欢迎大家订阅<Python实战-构建基于股票的量化交易系统>小册子,小册子会陆续推出与小册内容相关的专栏文章,对涉及到的知识点进行更全面的扩展介绍,并且会有选择地收录至小册中,更便于广大读 ...

  8. python爬网页源码_python爬虫爬取网页的内容和网页源码不同?

    可以看到这里id为k_total的元素值不同,爬出来是1,网页源码是55. 附还未完成的代码:import requests from bs4 import BeautifulSoup import ...

  9. python爬虫框架源码_python爬虫的基本框架

    1.爬虫的基本流程: 通过requests库的get方法获得网站的url 浏览器打开网页源码分析元素节点 通过BeautifulSoup或者正则表达式提取想要的数据 储存数据到本地磁盘或者数据库 2. ...

最新文章

  1. Python3学习笔记(二):基本数据类型
  2. profibus 主站软件_SIMATIC S71500与TIA博途软件的使用连载63
  3. 深入浅出之正则表达式(一)
  4. C# DateTimePicker控件设置空时间
  5. 具备自动刷新功能的 SAP ABAP ALV 报表
  6. html 字符串最后加空格,html space空格符
  7. 获取iOS任意线程调用堆栈(一)获取任意线程的调用栈地址列表
  8. 2020年十大开源漏洞回顾
  9. ****CentOS下安装JDK1.7
  10. UITextField-IOS开发
  11. 霍夫丁不等式及其他相关不等式证明
  12. 本地计算机 策略在哪xp系统,本地组策略编辑器在哪 打开组策略管理器方法
  13. Scratch角色的绘制与中心点
  14. mysql master sevler_零零星星
  15. [凯圣王]减脂挑战第15天变化/饮食思路分享/碳水循环+轻断食/GI值和GL值的应用/碳水后置的理论基础
  16. 牛客练习赛107 A~D除C
  17. 区块链与联邦学习综述
  18. 奥运圣火29日起点燃燕赵激情 李梅素将承担首棒
  19. Quartz.Net+Microsoft.Extensions.Hosting创建服务
  20. 【数分书单】分析思维《一本小小的蓝色逻辑书》第五章小结

热门文章

  1. 分别用邻接矩阵和邻接表实现图的深度优先遍历和广度优先遍历_数据结构与算法学习笔记:图...
  2. 编辑神器Vi介绍及常用命令
  3. java的常用引用类、数组、String类
  4. 文本分类有哪些论文中很少提及却对性能有重要影响的tricks?
  5. 论文浅尝 | 面向视觉常识推理的层次语义增强方向图网络
  6. HTTPS请求实现框架
  7. 人工智能,装在罐子里
  8. CSS:盒子模型和清除float浮动的三种常用方法
  9. 8 计算机组成原理第五章 中央处理器 控制器 硬布线控制器 微程序控制器
  10. 运算符 优先级 结合性