递归算法

如果一个函数包含了对自己的调用,那么这个函数就是递归的.

比如我们计算下1-7乘法的计算:

def func(n):
if n ==1 :
return 1
return n*func(n-1) r=func(7)
print(r)

结果5040

冒泡算法

来个示意图:

冒泡排序(bubble sort)也是一种简单直观的算法.它重复的走访过要排序的数列,一次比较两次元素,如果他们的顺序错误,就把他们交换过来.走访数列的工作是重复的进行知道没有数据可交换,也就以为着该数列已经排序完成.此算法的名字由来是因为越小的元素会经由交换慢慢浮到数列的顶端而得名!

算法步骤

  1. 比较相邻的元素,如果第一个比第二个打,就交换他们的位置
  2. 对每一对相邻的元素做同样的工作,从开始第一对到结尾的最后一对,这步做完后,最后的元素会是最大的数字.
  3. 针对所有的元素重复以上的步骤,除最后一个.
  4. 持续每次对越来越少的元素重复上面的步骤,知道没有任何一对数字需要比较.

来个例子吧,对某个数列进行排序:

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)也是一种简单直观的排序算法.

排序步骤如下:

  1. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置
  2. 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
  3. 重复第二步,直到所有元素均排序完毕

有个特点是只取元素的下标进行插入或删除,不需要像冒泡算法那么进行频繁的元素之间的位置交换,所以效率较高!

看下例子吧:

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]

插入排序

示意图:

插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

步骤:

  1. 将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。
  2. 从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)

举个例子吧:

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 中的一些基础算法:递归/冒泡/选择/插入的更多相关文章

  1. php三种基础算法:冒泡,插入和快速排序法

    $array = array(2,3,5,6,9,8,1); //冒泡排序思想,前后元素比较 function sort_bulldle($array){ $num = count($array); ...

  2. python 数据结构与算法之排序(冒泡,选择,插入)

    目录 数据结构与算法之排序(冒泡,选择,插入) 为什么学习数据结构与算法: 数据结构与算法: 算法: 数据结构 冒泡排序法 选择排序法 插入排序法 数据结构与算法之排序(冒泡,选择,插入) 为什么学习 ...

  3. java 基础排序(冒泡、插入、选择、快速)算法回顾

    java 基础排序(冒泡.插入.选择.快速)算法回顾 冒泡排序 private static void bubbleSort(int[] array) { int temp; for (int i = ...

  4. 今天给大家分享一下js中常用的基础算法

    今天给大家分享一下js中常用的基础算法,废话不多说,直接上代码: 1.两个数字调换顺序 ,b= function fun(a,b){ b = b - a ;// a = 2 ; b = 2 a = a ...

  5. python中pandas数据分析基础3(数据索引、数据分组与分组运算、数据离散化、数据合并)

    //2019.07.19/20 python中pandas数据分析基础(数据重塑与轴向转化.数据分组与分组运算.离散化处理.多数据文件合并操作) 3.1 数据重塑与轴向转换1.层次化索引使得一个轴上拥 ...

  6. C++学习(三十八)(C语言部分)之 排序(冒泡 选择 插入 快排)

    算法是解决一类问题的方法排序算法 根据元素大小关系排序 从小到大 从大到小冒泡 选择 插入 快排希尔排序 归并排序 堆排序 冒泡排序 从头到尾比较 每一轮将最大的数沉底 或者最小数字上浮 选择排序 1 ...

  7. python中并发编程基础1

    并发编程基础概念 1.进程. 什么是进程? 正在运行的程序就是进程.程序只是代码. 什么是多道? 多道技术: 1.空间上的复用(内存).将内存分为几个部分,每个部分放入一个程序,这样同一时间在内存中就 ...

  8. 简单介绍下python中函数的基础语法

    python 函数 定义 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可. 特性 减少代码重复 使程序变得可扩展 使程序变得易于维护 函数的创建 pyt ...

  9. python中的内置函数,递归,递归文件显示(二),二分法

    1.部分内置函数 repr()显示出字符串的官方表示形式,返回一个对象的string形式 # repr 就是原封不动的输出, 引号和转义字符都不起作用 print(repr('大家好,\n \t我叫周 ...

随机推荐

  1. SQL进阶17-变量的声明/使用(输出)--全局变量/会话变量--用户变量/局部变量

    /*进阶17 变量 系统变量: 全局变量: 会话变量: 自定义变量: 用户变量: 局部变量: */ /* #一: 系统变量 #说明: 变量由系统提供,不是用户定义的,属于服务器层面 #使用的语法 #1 ...

  2. Understanding matrix factorization for recommendation

    http://nicolas-hug.com/blog/matrix_facto_4 import numpy as np import surprise # run 'pip install sci ...

  3. Bootstrap 表单布局示例

    <html> <head> <link href="../../dist/css/bootstrap.min.css" rel="style ...

  4. springboot项目上传文件大小限制问题

    1.报错信息: Error parsing HTTP request header Note: further occurrences of HTTP header parsing errors wi ...

  5. P3986 斐波那契数列——数学(EXGCD)

    https://www.luogu.org/problem/P3986 很久很久以前,我好像写过exgcd,但是我已经忘了: 洛谷上搜EXGCD搜不到,要搜(扩展欧几里得) 这道题就是ax+by=k, ...

  6. 使用C#代码调用Web API

    1. POST POST的参数需要加上[FromBady],且参数只能一个 客户端提交数据的时候ContentType 为 application/x-www-form-urlencoded 或者 a ...

  7. jumpserver 堡垒机环境搭建

    jumpserver 堡垒机环境搭建(图文详解) https://blog.csdn.net/my_bai/article/details/62226474   http://docs.jumpser ...

  8. 2018-2019-2 《网络对抗技术》Exp9 Web安全基础 20165114

    Exp9 Web安全基础 目录 一.实验内容 二.基础问题回答 (1)SQL注入攻击原理,如何防御 (2)XSS攻击的原理,如何防御 (3)CSRF攻击原理,如何防御 三.实践过程记录 3.1 注入缺 ...

  9. C# ASP.NET 控制windows服务的 开启和关闭 以及重启

    用ASP.NET控制Windows服务的开启与关闭效果如图 代码 首页页面需要添加引用 页面的pageload中 实例化windows服务 protected void Page_Load(objec ...

  10. flutter doctor出现问题 [!] Android toolchain - develop for Android devices (Android SDK version 28.0.3) X Android license status unknown. Try re-installing or updating your Android SDK Manager. 的解决方案

    首先,问题描述: flutter doctor Doctor summary (to see all details, run flutter doctor -v): [√] Flutter (Cha ...