递归算法

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

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

  1. def func(n):
  2. if n ==1 :
  3. return 1
  4. return n*func(n-1)
  5. r=func(7)
  6. print(r)

结果5040

冒泡算法

来个示意图:

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

算法步骤

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

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

  1. def mp(args):
  2. for i in range(len(args)):
  3. for j in range(len(args)-1):
  4. if args[j]>args[j+1]:
  5. args[j],args[j+1]=args[j+1],args[j]
  6. print(args)
  7. li=[21,4,56,78,5,65]
  8. mp(li)

结果:

  1. [4, 5, 21, 56, 65, 78]

选择排序法

示意图:

选择排序法(selection sort)也是一种简单直观的排序算法.

排序步骤如下:

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

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

看下例子吧:

  1. def select(args):
  2. for i in range(len(args)):
  3. max_index=i
  4. for j in range(i,len(args)):
  5. if args[j]<args[max_index]:
  6. max_index=j
  7. temp=args[i]
  8. args[i]=args[max_index]
  9. args[max_index]=temp
  10. return args

结果:

  1. [4, 5, 21, 56, 65, 78]

插入排序

示意图:

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

步骤:

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

举个例子吧:

  1. def insert(args):
  2. for i in range(len(args)):
  3. max_index=i
  4. for j in range(i+1,len(args)):
  5. if args[max_index]>args[j]:
  6. max_index=j
  7. temp=args[i]
  8. args[i]=args[max_index]
  9. args[max_index]=temp
  10. print(args)
  11. return args
  12. insert(li)

结果:

  1. [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. Electron Apps Are Bad, So Now You Can Create Desktop Apps With HTML5 + Golang

    原文:https://www.phoronix.com/scan.php?page=news_item&px=HTML5-Golang-Desktop-Apps --------------- ...

  2. leetcode-cn上面刷题

    https://leetcode-cn.com/problemset/database/ ------------------------------------------------------- ...

  3. 《hello--world团队》第四次作业:项目需求调研与分析

    项目 内容 这个作业属于哪个课程 2016级计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 实验八 团队作业4:基于原型的团队项目需求调研与分析 团队名称 <hello--w ...

  4. 回调函数(callback)

    回调函数(callback) A "callback" is any function that is called by another function which takes ...

  5. 我的 archlinux 内核参数配置

    title Arch Linux linux /vmlinuz-linux initrd /amd-ucode.img initrd /initramfs-linux.img options root ...

  6. vue 安装 ‘node-sass’ 运行报错:ERROR in Cannot find module 'node-sass'

    好像是由于cnpm安装导致.执行下面的安装代码,或者使用npm 安装node-sass cnpm install node-sass@latest

  7. 53、servlet3.0-简介&测试

    53.servlet3.0-简介&测试 Servlet 4.0 : https://www.jcp.org/en/jsr/summary?id=servlet+4.0

  8. spark的广播变量

    直接上代码:包含了,map,filter,persist,mapPartitions等函数 String master = "spark://192.168.2.279:7077" ...

  9. Vagrant Docker Composer Yarn 国外资源下载慢或失败的问题

    1 问题 有时,我们请求国外资源时,下载巨慢,甚至失败.如: cd vue-devtools/ $ yarn install 进行到 cypress.... 时,可能失败. 2 解决 次日凌晨(7-8 ...

  10. Bzoj 3122 [Sdoi2013]随机数生成器(BSGS+exgcd)

    Input 输入含有多组数据,第一行一个正整数T,表示这个测试点内的数据组数. 接下来T行,每行有五个整数p,a,b,X1,t,表示一组数据.保证X1和t都是合法的页码. 注意:P一定为质数 Outp ...