`
chiyx
  • 浏览: 275037 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

不一样的二分查找-只比较一次的2分查找实现

阅读更多
  • 正常进行2次比较的二分查找实现,取列表中点值,(1)先比较x是否小于v[mid],若小于则说明在mid的左侧,(2)继续比较x是否大于v[mid],若大于则说明在mid的右侧
  • (3)否则mid即为x的位置
    int binsearch(int x, int v[], int n) {
    	int low, high, mid;
    	low = 0;
    	high = n - 1;
    	while(low <= high) {
    		mid = low + high;
    		if (x < v[mid]) {
    			high = mid - 1;
    		}
    		else if (x > v[mid]) {
    			low = mid + 1;
    		}else {
    			return mid;
    		}
    	}
    	return -1;
    }
    
  • 只进行1次比较的二分查找实现,取列表中点值,(1)比较x是否小于v[mid],若小于则说明在mid的左侧 (2)否则记录下当前mid的值,继续往右比较
  • (3)查找结束后,对比记录下的位置所对应的值是否等于x
    int binsearch2(int x, int v[], int n) {
    	int low, high, mid, cur;
    	cur = -1;
    	low = 0;
    	high = n - 1;
    	while (low <= high) {
    		mid = (low + high) / 2;
    		if (x < v[mid]) {
    			high = mid -1;
    		}else {
    			cur = mid;
    			low = mid + 1;
    		}
    	}
    	return (cur != -1 && v[cur] == x)? cur : -1;
    }
    



    第二种方式减少了循环内的比较次数,但是可能增加本身循环的次数(第一种方式,在mid=x时就可以退出循环了,但第二种的循环结束条件为low 〉high)但因为是o(logN)所以循环次数增加的不多,还没进行实际的性能测试,以后补上。
    分享到:
    评论

    相关推荐

      二分查找-python.docx

      以下是二分查找的一个简单Python实现: ```python def binary_search(arr, target): left, right = 0, len(arr) - 1 while left mid = left + (right - left) // 2 # 防止(left + right)可能导致的整数溢出 ...

      二分查找

      根据给定的部分代码,我们可以看到一个不完整的二分查找实现示例。下面将对该代码进行解析,并提供一个更完整的二分查找实现。 ```csharp using System; class Test { static void Main() { string[] str = { ...

      算法导论二分查找算法

      #### 一、二分查找算法简介与原理 二分查找算法是一种高效的搜索技术,主要用于在已排序的数组中查找特定元素。该算法的基本思想是在每一步将查找区间减半,直至找到目标元素或者查找区间为空。 **简单定义:** 在...

      C语言实现的二分法快速查找|二分法排序|二分法查找C#

      根据给定的文件信息,我们可以深入探讨二分查找算法在C语言中的实现,以及其在C#中的应用可能性。二分查找(Binary Search),又称折半查找,是一种在有序数组中查找特定元素的搜索算法。搜索过程从数组的中间元素...

      javascript实现二分查找法实现代码

      在js中可能会更灵活的用到a-z上,或者用到拼音…或者用到…… 不过值得深思的一个问题是,如果为了实现对拼音之类的二分查找.而经过如下流程是否值得: 1。对拼音排序,貌似代码量不小吧。 2。然后再二分查找。这又...

      C++折半查找代码实现

      折半查找(Binary Search),又称二分查找,是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间...

      排序及折半查找c语言简单实现

      最后,我们讨论折半查找,也称为二分查找。这是一种在有序数组中查找特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是目标值,则搜索结束;如果目标值大于或小于中间元素,则在数组大于或小于...

      直接,快速,冒泡,选择,二分查找排序

      本文将详细介绍五种经典的排序算法:直接插入排序、冒泡排序、选择排序和快速排序,以及一种查找算法——二分查找,并提供Java语言的实现。 一、直接插入排序 直接插入排序是一种简单直观的排序算法。它的工作原理...

      计算机二级公共基础知识

      顺序查找法每一次比较,只将查找范围减少1,而二分法查找,每比较一次,可将查找范围减少为原来的一半,效率大大提高。 对于长度为n的有序线性表,在最坏情况下,二分法查找只需比较log2n次, 二级公共...

      选择排序、冒泡排序、快速排序、折半查找

      最后,我们讨论折半查找,也称为二分查找。这是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是目标值,则搜索过程结束;如果目标值大于或小于中间元素,则在数组...

      给定一个单调递增的整数序列,问某个整数是否在序列中

      提供的C语言代码实现了上述的二分查找算法。代码中定义了`search`函数用于执行二分查找,`main`函数则是程序的入口点,负责读取用户输入的整数序列和要查找的元素,调用`search`函数,并打印结果。 具体而言: - `...

      jQuery完全实例.rar

      这个函数的作用如同$(document).ready()一样,只不过用这个函数时,需要把页面中所有需要在 DOM 加载完成时执行的$()操作符都包装到其中来。从技术上来说,这个函数是可链接的--但真正以这种方式链接的情况并不多...

      js基本算法:冒泡排序,二分查找的简单实例

      本文主要介绍了JavaScript中两种基础但非常重要的算法:冒泡排序和二分查找。这两种算法是计算机科学中解决问题的基础工具,对于理解和优化代码性能至关重要。 首先,我们来看冒泡排序。冒泡排序是一种简单的排序...

      折半查找案例使用

      在IT领域,数据结构和算法是编程的基础,其中折半查找(也称为二分查找)是一种高效的搜索技术,尤其适用于已排序的数组或列表。它的工作原理是通过不断缩小搜索范围,每次都将待查找区域减半,直到找到目标元素或者...

      python笔试例题(快速排序、二分查找、最长无重复子串、最长回文串长度、输出数组中两数相加=target的下标、用两.pdf

      2. **二分查找**:二分查找,又称折半查找,适用于有序数组。它的工作原理是将数组分为两半,每次比较中间元素与目标值,根据比较结果缩小搜索范围,直到找到目标值或者搜索范围为空。在代码中,`lowwer_bound`函数...

      java 冒泡算法和插入法排序,二分法查找

      至于二分查找,Java实现可能如下: ```java int binarySearch(int[] arr, int target) { int left = 0; int right = arr.length - 1; while (left ) { int mid = left + (right - left) / 2; if (arr[mid] == ...

      数据结构第九章 查找作业及答案(100分).docx

      1.在有序表A[1..18]中,采用二分查找算法查找元素值等于A[7]的元素,所比较过的元素的下标依次为 。2.利用逐点插入法建立序列(61,75,44,99,77,30,36,45)对应的二叉排序树以后,查找元素36要进行 次元素间的...

      8086汇编实现冒泡排序、直接插入排序、折半查找

      **折半查找**(二分查找)是一种在有序数组中查找某一特定元素的搜索算法。查找过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或...

    Global site tag (gtag.js) - Google Analytics