python 中的一些基础算法:递归/冒泡/选择/插入
递归算法
如果一个函数包含了对自己的调用,那么这个函数就是递归的.
比如我们计算下1-7乘法的计算:
def func(n):
if n ==1 :
return 1
return n*func(n-1)
r=func(7)
print(r)
结果5040
冒泡算法
来个示意图:

冒泡排序(bubble sort)也是一种简单直观的算法.它重复的走访过要排序的数列,一次比较两次元素,如果他们的顺序错误,就把他们交换过来.走访数列的工作是重复的进行知道没有数据可交换,也就以为着该数列已经排序完成.此算法的名字由来是因为越小的元素会经由交换慢慢浮到数列的顶端而得名!
算法步骤
- 比较相邻的元素,如果第一个比第二个打,就交换他们的位置
- 对每一对相邻的元素做同样的工作,从开始第一对到结尾的最后一对,这步做完后,最后的元素会是最大的数字.
- 针对所有的元素重复以上的步骤,除最后一个.
- 持续每次对越来越少的元素重复上面的步骤,知道没有任何一对数字需要比较.
来个例子吧,对某个数列进行排序:
def mp(args):
for i in range(len(args)):
for j in range(len(args)-1):
if args[j]>args[j+1]:
args[j],args[j+1]=args[j+1],args[j]
print(args)
li=[21,4,56,78,5,65]
mp(li)
结果:
[4, 5, 21, 56, 65, 78]
选择排序法
示意图:

选择排序法(selection sort)也是一种简单直观的排序算法.
排序步骤如下:
- 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置
- 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
- 重复第二步,直到所有元素均排序完毕
有个特点是只取元素的下标进行插入或删除,不需要像冒泡算法那么进行频繁的元素之间的位置交换,所以效率较高!
看下例子吧:
def select(args):
for i in range(len(args)):
max_index=i
for j in range(i,len(args)):
if args[j]<args[max_index]:
max_index=j
temp=args[i]
args[i]=args[max_index]
args[max_index]=temp
return args
结果:
[4, 5, 21, 56, 65, 78]
插入排序
示意图:

插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
步骤:
- 将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。
- 从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)
举个例子吧:
def insert(args):
for i in range(len(args)):
max_index=i
for j in range(i+1,len(args)):
if args[max_index]>args[j]:
max_index=j
temp=args[i]
args[i]=args[max_index]
args[max_index]=temp
print(args)
return args
insert(li)
结果:
[4, 5, 21, 56, 65, 78]
python 中的一些基础算法:递归/冒泡/选择/插入的更多相关文章
- php三种基础算法:冒泡,插入和快速排序法
$array = array(2,3,5,6,9,8,1); //冒泡排序思想,前后元素比较 function sort_bulldle($array){ $num = count($array); ...
- python 数据结构与算法之排序(冒泡,选择,插入)
目录 数据结构与算法之排序(冒泡,选择,插入) 为什么学习数据结构与算法: 数据结构与算法: 算法: 数据结构 冒泡排序法 选择排序法 插入排序法 数据结构与算法之排序(冒泡,选择,插入) 为什么学习 ...
- java 基础排序(冒泡、插入、选择、快速)算法回顾
java 基础排序(冒泡.插入.选择.快速)算法回顾 冒泡排序 private static void bubbleSort(int[] array) { int temp; for (int i = ...
- 今天给大家分享一下js中常用的基础算法
今天给大家分享一下js中常用的基础算法,废话不多说,直接上代码: 1.两个数字调换顺序 ,b= function fun(a,b){ b = b - a ;// a = 2 ; b = 2 a = a ...
- python中pandas数据分析基础3(数据索引、数据分组与分组运算、数据离散化、数据合并)
//2019.07.19/20 python中pandas数据分析基础(数据重塑与轴向转化.数据分组与分组运算.离散化处理.多数据文件合并操作) 3.1 数据重塑与轴向转换1.层次化索引使得一个轴上拥 ...
- C++学习(三十八)(C语言部分)之 排序(冒泡 选择 插入 快排)
算法是解决一类问题的方法排序算法 根据元素大小关系排序 从小到大 从大到小冒泡 选择 插入 快排希尔排序 归并排序 堆排序 冒泡排序 从头到尾比较 每一轮将最大的数沉底 或者最小数字上浮 选择排序 1 ...
- python中并发编程基础1
并发编程基础概念 1.进程. 什么是进程? 正在运行的程序就是进程.程序只是代码. 什么是多道? 多道技术: 1.空间上的复用(内存).将内存分为几个部分,每个部分放入一个程序,这样同一时间在内存中就 ...
- 简单介绍下python中函数的基础语法
python 函数 定义 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可. 特性 减少代码重复 使程序变得可扩展 使程序变得易于维护 函数的创建 pyt ...
- python中的内置函数,递归,递归文件显示(二),二分法
1.部分内置函数 repr()显示出字符串的官方表示形式,返回一个对象的string形式 # repr 就是原封不动的输出, 引号和转义字符都不起作用 print(repr('大家好,\n \t我叫周 ...
随机推荐
- idea的jdk版本问题
问题描述: 解决: 检查以上是否版本一致. 不行就再检查下面的: 如果上面的方法还是不行的话,就建议你改一下pom文件中的maven插件编译级别,可以通过搜索所有的pom.xml,1.6这个关键词,就 ...
- 大数据之路week07--day03(Hadoop深入理解,JAVA代码编写WordCount程序,以及扩展升级)
什么是MapReduce 你想数出一摞牌中有多少张黑桃.直观方式是一张一张检查并且数出有多少张是黑桃. MapReduce方法则是: 1.给在座的所有玩家中分配这摞牌 2.让每个玩家数自己手中的牌有几 ...
- dt7.0自定义推送熊掌号功能插件
因要推送较早的数据,所以写了一个自定义推送熊掌号的功能插件,因我自己站点是新站,推送的数据较少,所以程序比较简单,算是初始版本,凑合着用吧. <?php /* 百度当天主动推送熊掌功能 作者:6 ...
- 原生JS实现九宫格拼图
实现这个案例,需要考虑到鼠标的拖拽效果(onmousedown/onmousemove/mouseup) 拖拽分解: 按下鼠标---->移动鼠标----->松开鼠标 1.给目标元素添加on ...
- PostgreSQL 多版本的实现与Innodb和oracle的差别
PostgreSQL与oracle或InnoDB的多版本实现最大的区别在于最新版本和历史版本是否分离存储,PostgreSQL不分,而oracle和InnoDB分,而innodb也只是分离了数据,索引 ...
- mount/umount
mount 挂载文件系统 6的 查看当前挂载情况 7的 将文件系统挂载到目录下,这个目录中的文件随着文件系统走,文件系统挂到那,里面的文件就在哪 挂载到其他地方 指定卷标的 指定文件UUID 指定ac ...
- Educational Codeforces Round 72
目录 Contest Info Solutions A. Creating a Character B. Zmei Gorynich C. The Number Of Good Substrings ...
- python中如何给散点图上面的特定点做标记
今天想在散点图的某些特定的点外面画圆圈标记,从下面的文章找到一些灵感,只要在原来的散点图上面给指点添加相应的标志,设置其透明度就可以实现该想法. 顺便复习下散点图的用法. 大家平时为了直观地显示数据的 ...
- Scrapy不同的item指定不同的Pipeline
scrapy不同的item指定不同的Pipeline from items import AspiderItem, BspiderItem, CspiderItem class myspiderPip ...
- 关于大JSON 的问题的解决方式
ASP.NET MVC JSON 大数据异常提示JSON 字符串超出限制的异常问题 今天客户突然过来找我说在后台添加了一篇超长的文章后,所有后台的文章都显示不出来了.后台的前端显示是用easyui的, ...