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

  1. Python学习——Python海龟制图中的文字

    可以用海龟的write方法显示文字,代码如下: import turtle as tt.setup(600, 400) t.write("人生苦短,我用Python", font= ...

  2. Python学习---Python安装与基础1205

    1.0. 安装 1.1.1. 下载 官网下载地址:https://www.python.org/downloads/release/python-352/ 1.1.2. 配置环境变量 因为在安装的时候 ...

  3. Python学习 Python基本图形绘制

    Python学习 Python基本图形绘制 1.深入理解Python语言 2.Python蟒蛇绘制 3.turtle库的使用 4.代码调用方法分析 5.学以致用 1.深入理解Python语言 计算机技 ...

  4. Python学习,第七课(灵活使用Frame,让布局更舒适)

    Python学习第七课(让界面布局舒适,是一个长久的工作) 一入布局深似海,加一减一都很难 基础知识 尝试布局 尝试好布局,感受下元素带来的不同 改造主程序,细节还是要优化 细节优化,细枝末节的参数 ...

  5. 前阿里大佬干货分享,0基础小白,转行必看Python学习笔记(七)

    Python学习笔记7 异常处理 包和模块 包和模块的一般操作 导入操作的本质 模块检索的路径 导入模块的场景 第三方包和模块的安装 异常处理 系统内部一开始已经内置了一些特定的错误场景,当我们触发了 ...

  6. 计算机二级Python学习笔记(七)

    上一篇:计算机二级Python学习笔记(六) 第7章 文件和数据格式化 7.1 文件的使用 文件:数据的集合和抽象,存储在辅助存储器上的一组数据序列,可以包含任何数据内容. 文件类型:文本文件(由单一 ...

  7. Python学习-Python简介和基础入门

    1.Python简介 1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是 ...

  8. Learning Python 学习Python Lynda课程中文字幕

    Learning Python 中文字幕 学习Python 中文字幕Learning Python Python–流行且易读性强的面向对象语言 - 既强大又易于学习 无论您是编程新手还是有经验的开发人 ...

  9. python学习-python学习笔记(一)python简介和基础

    1.什么是python? python是一种面向对象的,解释型的计算机语言,它的特点是语法简介,优雅,简单易学.1989年诞生,Guido(龟叔)开发. 编译型语言:代码在编译之后,编译成2进制的文件 ...

  10. python学习-综合练习七(二分查找(递归)、线性查找、插入排序、快速排序、选择排序、冒泡排序、归并排序、堆排序)-实例

    文章目录 二分查找 线性查找 插入排序 快速排序 选择排序 冒泡排序 归并排序 堆排序 推荐代码一 推荐代码二 希尔排序 拓扑排序 说明:本篇博文的知识点大部分来自 Python3 实例 二分查找 二 ...

最新文章

  1. db first和code first
  2. C++箴言:理解inline化的介入和排除
  3. mysql done_MySQL 获取游标结果报错:1193-Unknown system variable ‘done’
  4. 3650m5设置u盘启动_系统重装必备神器,U盘如何制作启动盘?
  5. 使用同步机制解决线程安全问题
  6. ffdshow 源代码分析1 : 整体结构
  7. windows8 认识及使用
  8. cannot register datanode 0.0.0.0:1002,because current license expired time is
  9. python验证码登录代码_Python模拟登录验证码(代码简单)
  10. app录制回放 jmeter_Jmeter使用之脚本录制回放
  11. Kubuntu20.04开启UI的root登录
  12. Spring Data Elasticsearch 基本语法及使用
  13. 私有云盘的搭建(owncloud、seafile)
  14. Win10屏幕截图自动保存方法
  15. 如何识别哭泣csdn_【jji技术】语音识别工程实战:聊聊语音芯片选型
  16. 如何用小学生计算机来玩游戏,小学生一年级第一次玩电脑作文
  17. 浙江大学翁恺老师的城堡游戏源代码
  18. 数据集图片数据标记工具Labelimg
  19. matlab实验报告四,matlab实验报告4
  20. matlab水力学工具箱,新浪潮水工设计工具箱

热门文章

  1. 305页18万字智慧三甲医院弱电系统设计方案完整版
  2. 淘宝模板开发系列之JS模块开发
  3. 全民k歌导出音乐方法(包含未发布,已发布歌曲导的两种方法)
  4. JeecgBoot duplicateCheck 表单字段重复校验通用JS详细记录
  5. SGI(Silicon Graphics )
  6. core java第十版_java核心技术第十版 笔记
  7. Deep Unsupervised Learning using Nonequilibrium Thermodynamics论文翻译学习
  8. wagaa划时代免安装_Vagaa哇嘎画时代
  9. 【网单服务端】超神传盛唐仙神妖魔混战超神传单机网单+视频教程+GM工具
  10. 小软件神器集合(不定期更新)