二分查找
简述该算法的作用 :输入一个有序的元素列表,如果要查找的元素包含在列表中,结果返回其位置,否则为null。
与简单查找的相比
1、对于一个包含n个元素的列表,用二分法查找需要logn步(log一般是以2为底),用简单查找最多需要n步。大大减少了查找的时间,提高了效率。但值得我们注意的是一定要是有序列表,才可以采用二分查找减少查找代价。
2、 随着实验数量的数量的增加,二分查找需要的额外时间并不多,而简单查找需要的额外时间却很多。有鉴于此,仅知道算法需要多长时间才能运行完毕还不够,还需知道运行时间如何随列表增长而增加。这正是大O表示法的用武之地。
大O表示法
大O表示法指出了算法有多快。例如,假设列表包含n个元素。简单查找需要检查每个元素,因此需要执行n次操作。使用大O表法,这个运行时间为O(n)。然而二分查找需要执行log n次操作,使用大O表示法,这个运行时间用O(log n)表示。单位秒呢?没有——大O表示法指的并非以秒为单位的速度。大O表示法让你能够比较操作数,它指出了算法运行时间的增速。
一些常见的大O运行的时间
在看了上面的对比后,可能会认为根本就没有运行时间为第五种的算法,那你就错了!这个算法主要解决非常著名的旅行商问题
简述旅行商问题
一位旅行商要前往五个城市,同时确保旅程最短。5个城市有120种不同的排列方式。因此,在涉及5个城市时,解决这个问题需要执行120次操作。涉及6个城市时,需要执行720次操作(有720种不同的排列方式)。涉及7个城市时,需要执5040次操作!推而广之,涉及n个城市时,需要执行n!(n的阶乘)次操作才能计算出结果。因此运行时间为O(n!),即阶乘时间。
这是一个计算机科学领域待解决的问题之一,对于这个问题还没找到更快的算法。
二分查找的核心代码:
测试一下:
结果:
大家可以参考以下链接:
https://blog.csdn.net/m0_37846020/article/details/103039728