Python学习,python实现七个基本算法
1.顺序查找
- 当数据存储在诸如列表的集合中时,我们说这些数据具有线性或顺序关系。 每个数据元素都存储在相对于其他数据元素的位置。
由于这些索引值是有序的,我们可以按顺序访问它们。 这个过程产实现的搜索即为顺序查找。 - 顺序查找原理剖析:从列表中的第一个元素开始,我们按照基本的顺序排序,简单地从一个元素移动到另一个元素,直到找到我们正在寻找的元素或遍历完整个列表。如果我们遍历完整个列表,则说明正在搜索的元素不存在。
- 代码实现:该函数需要一个列表和我们正在寻找的元素作为参数,并返回一个是否存在的布尔值。found 布尔变量初始化为False,如果我们发现列表中的元素,则赋值为 True。
def search(alist,item):find = Falsecur = 0while cur < len(alist):if alist[cur] == item:find = Truebreakelse:cur += 1return find
2.二分查找
- 有序列表对于我们的实现搜索是很有用的。在顺序查找中,当我们与第一个元素进行比较时,如果第一个元素不是我们要查找的,则最多还有 n-1
个元素需要进行比较。 - 二分查找则是从中间元素开始,而不是按顺序查找列表。 如果该元素是我们正在寻找的元素,我们就完成了查找。
如果它不是,我们可以使用列表的有序性质来消除剩余元素的一半。
如果我们正在查找的元素大于中间元素,就可以消除中间元素以及比中间元素小的一半元素。如果该元素在列表中,肯定在大的那半部分。然后我们可以用大的半部分重复该过程,继续从中间元素开始,将其与我们正在寻找的内容进行比较。
'''
def search(alist,item):left = 0right = len(alist) - 1find = Falsewhile left <= right:mid_index = (left + right)//2if item == alist[mid_index]:find = Truebreakelse:if item > alist[mid_index]:left = mid_index + 1else:right = mid_index -1return 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.选择排序
工作原理:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。
'''
def sort(alist):length = len(alist)for j in range(length-1,0,-1):max_index = 0for i in range(1,j+1):if alist[max_index] < alist[i]:max_index = ialist[max_index],alist[j] = alist[j],alist[max_index]
5.插入排序
原理:
基本思想是,每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。关键码是数据元素中某个数据项的值,用它可以标示一个数据元素。
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群991032883
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def sort(alist):length = len(alist)for j in range(1,length):i = jwhile i > 0:if alist[i] < alist[i-1]:alist[i],alist[i-1] = alist[i-1],alist[i]i -= 1else:break
希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。
该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量(gap)”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率比直接插入排序有较大提高。
'''
def sort(alist):gap = len(alist)//2while gap >= 1:for j in range(gap,len(alist)):i = jwhile i > 0:if alist[i] < alist[i-gap]:alist[i],alist[i-gap] = alist[i-gap],alist[i]i -= gapelse:breakgap = gap // 2
6.快速排序
基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
'''
def sort(alist,start,end):low = starthigh = endif low >= high:returnmid = alist[low]while low < high:while low < high:if alist[high] >= mid:high -= 1else:alist[low] = alist[high]breakwhile low < high:if alist[low] < mid:low += 1else:alist[high] = alist[low]breakalist[low] = midsort(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//2left_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 += 1else:result.append(right_li[right_pointer])right_pointer += 1#当左右表的某一个表的指针偏移到末尾的时候,比较大小结束,将另一张表中的数据(有序)添加到result中result += left_li[left_pointer:]result += right_li[right_pointer:]return resultalist = [3,8,5,7,6]
print(merge_sort(alist))
8.各个算法的时间复杂度
Python学习,python实现七个基本算法相关推荐
- Python学习——Python海龟制图中的文字
可以用海龟的write方法显示文字,代码如下: import turtle as tt.setup(600, 400) t.write("人生苦短,我用Python", font= ...
- Python学习---Python安装与基础1205
1.0. 安装 1.1.1. 下载 官网下载地址:https://www.python.org/downloads/release/python-352/ 1.1.2. 配置环境变量 因为在安装的时候 ...
- Python学习 Python基本图形绘制
Python学习 Python基本图形绘制 1.深入理解Python语言 2.Python蟒蛇绘制 3.turtle库的使用 4.代码调用方法分析 5.学以致用 1.深入理解Python语言 计算机技 ...
- Python学习,第七课(灵活使用Frame,让布局更舒适)
Python学习第七课(让界面布局舒适,是一个长久的工作) 一入布局深似海,加一减一都很难 基础知识 尝试布局 尝试好布局,感受下元素带来的不同 改造主程序,细节还是要优化 细节优化,细枝末节的参数 ...
- 前阿里大佬干货分享,0基础小白,转行必看Python学习笔记(七)
Python学习笔记7 异常处理 包和模块 包和模块的一般操作 导入操作的本质 模块检索的路径 导入模块的场景 第三方包和模块的安装 异常处理 系统内部一开始已经内置了一些特定的错误场景,当我们触发了 ...
- 计算机二级Python学习笔记(七)
上一篇:计算机二级Python学习笔记(六) 第7章 文件和数据格式化 7.1 文件的使用 文件:数据的集合和抽象,存储在辅助存储器上的一组数据序列,可以包含任何数据内容. 文件类型:文本文件(由单一 ...
- Python学习-Python简介和基础入门
1.Python简介 1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是 ...
- Learning Python 学习Python Lynda课程中文字幕
Learning Python 中文字幕 学习Python 中文字幕Learning Python Python–流行且易读性强的面向对象语言 - 既强大又易于学习 无论您是编程新手还是有经验的开发人 ...
- python学习-python学习笔记(一)python简介和基础
1.什么是python? python是一种面向对象的,解释型的计算机语言,它的特点是语法简介,优雅,简单易学.1989年诞生,Guido(龟叔)开发. 编译型语言:代码在编译之后,编译成2进制的文件 ...
- python学习-综合练习七(二分查找(递归)、线性查找、插入排序、快速排序、选择排序、冒泡排序、归并排序、堆排序)-实例
文章目录 二分查找 线性查找 插入排序 快速排序 选择排序 冒泡排序 归并排序 堆排序 推荐代码一 推荐代码二 希尔排序 拓扑排序 说明:本篇博文的知识点大部分来自 Python3 实例 二分查找 二 ...
最新文章
- db first和code first
- C++箴言:理解inline化的介入和排除
- mysql done_MySQL 获取游标结果报错:1193-Unknown system variable ‘done’
- 3650m5设置u盘启动_系统重装必备神器,U盘如何制作启动盘?
- 使用同步机制解决线程安全问题
- ffdshow 源代码分析1 : 整体结构
- windows8 认识及使用
- cannot register datanode 0.0.0.0:1002,because current license expired time is
- python验证码登录代码_Python模拟登录验证码(代码简单)
- app录制回放 jmeter_Jmeter使用之脚本录制回放
- Kubuntu20.04开启UI的root登录
- Spring Data Elasticsearch 基本语法及使用
- 私有云盘的搭建(owncloud、seafile)
- Win10屏幕截图自动保存方法
- 如何识别哭泣csdn_【jji技术】语音识别工程实战:聊聊语音芯片选型
- 如何用小学生计算机来玩游戏,小学生一年级第一次玩电脑作文
- 浙江大学翁恺老师的城堡游戏源代码
- 数据集图片数据标记工具Labelimg
- matlab实验报告四,matlab实验报告4
- matlab水力学工具箱,新浪潮水工设计工具箱
热门文章
- 305页18万字智慧三甲医院弱电系统设计方案完整版
- 淘宝模板开发系列之JS模块开发
- 全民k歌导出音乐方法(包含未发布,已发布歌曲导的两种方法)
- JeecgBoot duplicateCheck 表单字段重复校验通用JS详细记录
- SGI(Silicon Graphics )
- core java第十版_java核心技术第十版 笔记
- Deep Unsupervised Learning using Nonequilibrium Thermodynamics论文翻译学习
- wagaa划时代免安装_Vagaa哇嘎画时代
- 【网单服务端】超神传盛唐仙神妖魔混战超神传单机网单+视频教程+GM工具
- 小软件神器集合(不定期更新)