冒泡排序、递归、二分查找
一、冒泡排序
给出一个纯数字列表. 请对列表进行排序.
思路:
1.完成a和b的数据交换. 例如, a = 10, b = 24 交换之后, a = 24, b = 10
2.循环列表. 判断a[i]和a[i+1]之间的大小关系, 如果a[i]比a[i+1]大. 则进行互换. 循环结束的时候. 当前列表中最大的数据就会被移动到最右端.
3.想一想, 如果再次执行一次上面的操作. 最终第二大的数据就移动到了右端. 以此类推. 如果反复的进行执行相应的操作. 那这个列表就变成了一个有序列表.
li=[11,9,3,6,1,5,7,32,21] for i in range(len(li)-1):for j in range(len(li)-1-i):if li[j]>li[j+1]:li[j],li[j+1]=li[j+1],li[j] print(li)
二、递归
在函数中调用函数本身. 就是递归
def func():
print("我是谁")
func()
func()
在python中递归的深度最⼤到998
def foo(n):
print(n)
n += 1
foo(n)
foo(1)
import os def func(filepath, n): # d:/sylar/# 1,打开这个文件夹files = os.listdir(filepath)# 2. 拿到每一个文件名for file in files: # 文件名# 3. 获取到路径f_d = os.path.join(filepath, file) # d:/sylar/文件名/# 4. 判断是否是文件夹if os.path.isdir(f_d):# 5. 如果是文件夹. 继续再来一遍print("\t"*n, file,":") # 打印文件名func(f_d, n + 1)else: # 不是文件夹. 普通文件print("\t"*n, file) func("d:/sylar",0)
三、二分查找
循环方法查找数据
lst = [22, 33, 44, 55, 66, 77, 88, 99, 101 , 238 , 345 , 456 , 567 , 678 , 789 ] n = 79 for el in lst:if el == n: # O(1)print("找到了")break else:print("没有")
二分法查找数据
使用二分法可以提高效率, 前提条件:有序序列 lst = [22, 33, 44, 55, 66, 77, 88, 99, 101 , 238 , 345 , 456 , 567 , 678 , 789] n = 88 left = 0 right = len(lst)-1while left <= right: # 边界, 当右边比左边还小的时候退出循环mid = (left + right)//2 # 必须是整除. 因为索引没有小数if lst[mid] > n:right = mid - 1if lst[mid] < n:left = mid + 1if lst[mid] == n:print("找到了这个数")break else:print("没有这个数")
递归来完成二分法
lst = [22, 33, 44, 55, 66, 77, 88, 99, 101 , 238 , 345 , 456 , 567 , 678 , 789] def func(n, left, right):if left <= right: # 边界mid = (left + right)//2if n > lst[mid]:left = mid + 1return func(n, left, right) # 递归 递归的入口elif n < lst[mid]:right = mid - 1# 深坑. 函数的返回值返回给调用者return func(n, left, right) # 递归elif n == lst[mid]:print("找到了")return mid# return # 通过return返回. 终止递归else:print("没有这个数") # 递归的出口return -1 # 1, 索引+ 2, 什么都不返回, None # 找66, 左边界:0, 右边界是:len(lst) - 1 ret = func(70, 0, len(lst) - 1) print(ret) # 不是None
转载于:https://www.cnblogs.com/shanae/p/9483010.html
冒泡排序、递归、二分查找相关推荐
- 冒泡排序,递归二分查找法,二分法
#冒泡排序list1=[2,4,5,6,7,8,9,11,30,35,38,41,42] def bubble_sort(list):for i in range(len(list)-1):for j ...
- Java基础语法——选择排序、冒泡排序以及二分查找法和Arrays类的使用
本文将带你了解选择排序.冒泡排序以及二分查找法的原理和代码实现,以及通过Arrays类快速实现对数组的一些操作 文章目录 一.选择排序 二.冒泡排序 三.二分查找法 四.Arrays类(对数组的操作) ...
- 常用十大算法 非递归二分查找、分治法、动态规划、贪心算法、回溯算法(骑士周游为例)、KMP、最小生成树算法:Prim、Kruskal、最短路径算法:Dijkstra、Floyd。
十大算法 学完数据结构该学什么?当然是来巩固算法,下面介绍了十中比较常用的算法,希望能帮到大家. 包括:非递归二分查找.分治法.动态规划.贪心算法.回溯算法(骑士周游为例).KMP.最小生成树算法:P ...
- 2022-04-07 西安 javaSE(04) 方法可变参数、重载、递归,数组、冒泡排序、二分查找、动态操作,二维数组、jvm内存区域划分
方法 1.方法传递参数 形参是基本类型: 1.参数传递的内容是该基本类型的数据值. 2.对形式参数的改变不会影响实际参数的数据值 形参是引用类型: 1.参数传递的是地址值 2.对形 ...
- java for循环和数组--冒泡排序、二分查找法
//100以内与7相关的数 for(int a=1;a<=100;a++){ if(a%7==0||a%10==7||a/10==7){ System.out.print(a+ ...
- 递归二分查找时间复杂度、空间复杂度和稳定性
递归 递归条件 自己调用自己 有结束条件 二分查找 二分查找对1~100乱序数字查找 l = list(range(1,101)) def bin_search(data_set,val):low = ...
- 再写顺序表(c语言实现,外加冒泡排序,二分查找)
概念 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储.在数组 上完成数据的增删查改. 顺序表一般可以分为: 静态顺序表:使用定长数组存储. 动态顺序表:使用动态 ...
- 算法前戏 递归 二分查找 列表查找
一.递归 概念: 函数直接或者间接的调用自身算法的过程,则该函数称为递归函数.在计算机编写程序中,递归算法对解决一大类问题是十分有效的. 特点: ①递归就是在过程或者函数里调用自身. ②在使用递归策略 ...
- 汇编语言-016(SCASB 、STOSB 、LODSD 、数组中的取值、二维数组操作、冒泡排序和二分查找、CMPSW )
1: SCASB : (字节)将AL的值与EDI寻址的一个字比较.进行在一个字符串检索特定的字符 .386 .model flat,stdcall.stack 4096 ExitProcess PRO ...
- 0913作业(冒泡排序、二分查找法、模拟摇乐游戏)
1.冒泡排序从小到大打印出(代码如下) package f.java;public class LS {public static void main(String[] args){// TODO A ...
最新文章
- python自动化之文件处理_Python自动化办公之Word批量转成自定义格式的Excel
- 从编程小白到全栈开发:基于框架开发服务端
- 如何用matlab分析chipscope的数据
- 编写图形界面程序,接受用户输入的5个浮点数据和一个文件目录名,将这五个数据保存在该文件中,再从文件中读取出来并且进行从大到小排序,然后再一次追加保存在该文件中。
- linux红帽子怎么配置dhcp,LinuxDHCP的高级配置如何应用呢?
- 如何成为呼叫中心客服老司机
- 作为后端开发如何设计数据库系列文章 设计SaaS系统表结构
- bzoj1051 受欢迎的牛 结论+tarjan
- oracle转换指定类型,PL/SQL 类型格式转换
- Swift - iCloud存储介绍
- 苹果电脑的文件怎么复制到移动硬盘,macbook文件怎么拷贝到移动硬盘
- Python开发-Django表单
- 电商如何抢占“双十一”?试试自动化仓库机器人 | 行业
- Tomcat 9下载安装及配置
- android蓝牙连接取消后怎么重新连上,重新启动后接收蓝牙连接更改
- 爱情大数据 | 你的专属微信聊天记录统计
- java学习笔记day09 final、多态、抽象类、接口
- 100天精通Python丨办公效率篇 —— 14、Python这些小技巧,让文件管理更加智能
- 鲜为人知的windows命令
- 康佳电视黑屏的处理方法,创维、小米、TCL等电视通用,常见的电视故障解决小技巧分享