关于冒泡排序、选择排序,顺序查找,二分查找的算法介绍
什么是时间复杂度?
一个算法花费的时间与算法中语句的执行次数成正比例,算法中语句执行次数多,它花费时间就多。而花费的时间越多,时间复杂度也就越高。
一、冒泡排序
基本思想:
1、比较相邻的元素。如果第一个比第二个大,就交换它们两个;
2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
3、针对所有的元素重复以上的步骤,除了最后一个;
4、重复步骤1~3,直到排序完成。
动态图演示:
程序:
程序执行情况:
排序结果:
生成一个1到1万的数组,对冒泡排序进行测试:
测试程序执行时间:
时间复杂度:由于冒泡排序是嵌套了两个for循环,进行排序的每个数都循环了两遍,所以冒泡排序的时间复杂度是O(n2)
对冒泡排序的优化:
思路:看看排序的数组是不是一个顺序数组
程序:
优化过后的执行时间:
经过优化后的时间复杂度为O(n)
二、选择排序
基本思想:
将一组数据分为两部分,前面是已排序部分,后面是未排序部分,首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,
然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
动态图演示:
程序:
排序结果:
生成一个1到1万的数组,对选择排序进行测试:
测试程序执行时间:
时间复杂度是O(n2)
三、顺序查找
基本思想:
顺序查找需要从一端到另一端按照顺序进行查找,最多需要比较n次。
程序:
测试1到1千万大小的数组的执行时间:
时间复杂度是O(n)
四、二分查找
算法思想:
有序列表中,二分查找从中间值开始,将数组分成比中间值小的部分和比中间值大的部分,如果中间值是我们查找的值,则完成查找;如果查找值小于中间值,
则在比中间值小的部分中查找;如果查找值比中间值大,则在比中间值大的部分中查找,之后再次重复上面过程。
$arr = array(10, 20, 30, 40, 50, 60, 70, 80, 90);
动态度演示:
代码:
运行结果:
测试1到1千万大小的数组的执行时间:
运行时间:
时间复杂度是O(log2n) (log是对数的意思,底是2)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
2020-01-20 抢票软件之——py12306使用指南(转载)
2020-01-20 IO 多路复用是什么意思?(转载)