关于冒泡排序、选择排序,顺序查找,二分查找的算法介绍
什么是时间复杂度?
一个算法花费的时间与算法中语句的执行次数成正比例,算法中语句执行次数多,它花费时间就多。而花费的时间越多,时间复杂度也就越高。
一、冒泡排序
基本思想:
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)

浙公网安备 33010602011771号