关于冒泡排序、选择排序,顺序查找,二分查找的算法介绍

什么是时间复杂度?
一个算法花费的时间与算法中语句的执行次数成正比例,算法中语句执行次数多,它花费时间就多。而花费的时间越多,时间复杂度也就越高。

 

一、冒泡排序

基本思想:

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)

 

posted @   raohuabing  阅读(239)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
历史上的今天:
2020-01-20 抢票软件之——py12306使用指南(转载)
2020-01-20 IO 多路复用是什么意思?(转载)
点击右上角即可分享
微信分享提示