
回复
本博客由 金陵科技学院-开放原子开源社 朱昊翔编写
针对普通无序数组,当我们需要查找某样东西时,我们可以直接选择使用线性查找,例如对于长度为n的数组可以选择遍历其所有数据直到找到你想找的数据
但是以上方法对于数据量较大的的数组,执行效率过低为O(n);
而对于有序数组,我们可以使用二分查找法,进行高效的查找,即二分查找法,该效率为O(log2 n)
如果找到该数则直接输出并退出循环
如果没找到该数则继续寻找,以下分为两种情况
第一种为位于m位置的数大于要找的数
这种情况下接下来要查找的区域应缩小到[i到m]区域
第二种情况为位于m位置的数小于要找的数
此时应将区域缩小到[m到j区域]
但是在一些特殊情况下我们可能找不到该数,这时候应该提示对方:你查找的数不在该数组中
我们可以定义一个变量f,用f=1来表示没找到,f=0反之
因此我们可以将该程序核心部分融合在一起写一个函数
使用二分查找法能够大幅提高查找效率,尤其针对大量的数据需要处理时
虽然使用二分查找法能够提升查找效率,但是大多时候我们处理的数据并不是排序好的,因此我们需要再花费大量的时间用于对数组进行排序,而选择排序和冒泡排序也需要耗费O(n²),即使占用大量的空间使用归并排序也需要花费O(nlog2 n)。
综上所述,对于一定量的数据并不是选择二分查找法就能获得更高的效率,我们应该权衡要处理的数据进行判断,使用更高效的方法进行数据处理