您的当前位置:首页正文

关于JS二分查找算法及代码的分享

2023-11-30 来源:博科教育

本文主要和大家分享JS二分查找算法及代码,需要的朋友可以参考下,希望能帮助到大家。

4.1 二分查找算法介绍二分法查找,也称折半查找,是一种在有序数组中查找特定元素的搜索算法。查找过程可以分为以下步骤:(1)首先,从有序数组的中间的元素开始搜索,如果该元素正好是目标元素(即要查找的元素),则搜索过程结束,否则进行下一步。(2)如果目标元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半区域查找,然后重复第一步的操作。(3)如果某一步数组为空,则表示找不到目标元素。参考代码:非递归算法

function binary_search(arr,key){ var low=0, high=arr.length-1; while(low<=high){ var mid=parseInt((high+low)/2); if(key==arr[mid]){ return mid; }else if(key>arr[mid]){ low=mid+1; }else if(key<arr[mid]){ high=mid-1; }else{ return -1; } }};var arr=[1,2,3,4,5,6,7,8,9,10,11,23,44,86];var result=binary_search(arr,10);alert(result); // 9 返回目标元素的索引值

递归算法

function binary_search(arr,low,high,key){ if(low>high){ return -1; } var mid=parseInt((high+low)/2); if(arr[mid]==key){ return mid; }else if(arr[mid]>key){ high=mid-1; return binary_search(arr,low,high,key); }else if(arr[mid]<key){ low=mid+1; return binary_search(arr,low,high,key); }};var arr=[1,2,3,4,5,6,7,8,9,10,11,23,44,86];var result=binary_search(arr,0,13,10);alert(result); // 9 返回目标元素的索引值

小编还为您整理了以下内容,可能对您也有帮助:

二分查找的代码怎么写(其中2种)?

二分查找是一种在有序数组中查找指定元素的算法,它的基本思想是:每次将查找区间缩小一半,直到找到目标元素或者确定目标元素不存在为止。

下面是两种写法:

    递归版本

def binary_search(array, target, low, high):

if low > high:

return -1

mid = (low + high) // 2

if array[mid] == target:

return mid

elif array[mid] > target:

return binary_search(array, target, low, mid-1)

else:

return binary_search(array, target, mid+1, high)

# 调用方法

index = binary_search(array, target, 0, len(array)-1)

    循环版本

def binary_search(array, target):

low, high = 0, len(array) - 1

while low <= high:

mid = (low + high) // 2

if array[mid] == target:

return mid

elif array[mid] > target:

high = mid - 1

else:

low = mid + 1

return -1

# 调用方法

index = binary_search(array, target)

在这里,array 是待查找的有序数组,target 是要查找的元素,low 和 high 分别表示查找区间的左右端点。如果找到了目标元素,函数会返回其在数组中的下标;如果没有找到,函数会返回 -1。

追问你看看我问的是什么好吗,你学过C语言吗,这是你在网上找的?

二分查找的代码怎么写(其中2种)?

二分查找是一种在有序数组中查找指定元素的算法,它的基本思想是:每次将查找区间缩小一半,直到找到目标元素或者确定目标元素不存在为止。

下面是两种写法:

    递归版本

def binary_search(array, target, low, high):

if low > high:

return -1

mid = (low + high) // 2

if array[mid] == target:

return mid

elif array[mid] > target:

return binary_search(array, target, low, mid-1)

else:

return binary_search(array, target, mid+1, high)

# 调用方法

index = binary_search(array, target, 0, len(array)-1)

    循环版本

def binary_search(array, target):

low, high = 0, len(array) - 1

while low <= high:

mid = (low + high) // 2

if array[mid] == target:

return mid

elif array[mid] > target:

high = mid - 1

else:

low = mid + 1

return -1

# 调用方法

index = binary_search(array, target)

在这里,array 是待查找的有序数组,target 是要查找的元素,low 和 high 分别表示查找区间的左右端点。如果找到了目标元素,函数会返回其在数组中的下标;如果没有找到,函数会返回 -1。

追问你看看我问的是什么好吗,你学过C语言吗,这是你在网上找的?

二分查找使用的算法思想

关于二分查找使用的算法思想如下:

折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。

它的基本思想是,将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。如果x<a[n/2],则我们只要在数组a的左半部继续搜索x(这里假设数组元素呈升序排列)。

如果x>a[n/2],则我们只要在数组a的右半部继续搜索x。二分搜索法的应用极其广泛,而且它的思想易于理解,但是要写一个正确的二分搜索算法也不是一件简单的事。第一个二分搜索算法早在1946年就出现了,但是第一个完全正确的二分搜索算法直到1962年才出现。

Bentley在他的著作《Writing Correct Programs》中写道,90%的计算机专家不能在2小时内写出完全正确的二分搜索算法。

拓展

二分查找算法,该算法要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。如果一个序列是无序的或者是链表,那么该序列就不能使用二分查找。

二分查找算法原理:若待查序列为空,则返回-1,并退出算法;若待查序列不为空,则将它的中间元素与目标数值进行比较,判断是否相等;若相等,则返回中间元素索引,并退出算法;此时已查找成功。若不相等,则比较中间元素与目标数值的大小。

若中间元素>目标数值,则将当前序列的前半部分作为新的待查序列;若中间元素<目标数值,则将当前序列的后半部分作为新的待查序列;在新的序列上重新从第(1)步开始查找。

二分法查找的思路:首先,从数组的中间元素开始搜索,如果该元素是目标元素,则搜索过程结束,否则执行下一步。如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复步骤(1)的操作。如果某一步数组为空,则表示找不到目标元素。

博科教育还为您提供以下相关内容希望对您有帮助:

二分查找的代码怎么写(其中2种)?

二分查找是一种在有序数组中查找指定元素的算法,它的基本思想是:每次将查找区间缩小一半,直到找到目标元素或者确定目标元素不存在为止。下面是两种写法:递归版本 def binary_search(array, target, low, high):if low &gt;...

二分查找算法是什么?

关于二分查找使用的算法思想如下:折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。它的基本思想是,将n个元素分成个数大致相同的两半,取a[n/2]...

二分查找算法

搜索范围缩小这种搜索算法每一次比较都使搜索范围缩小一半。比较如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。

查找算法的二分查找

【算法复杂度】假设其数组长度为n,其算法复杂度为o(log(n))下面提供一段二分查找实现的伪代码:BinarySearch(max,min,des)mid-des thenmax=mid-1elsemin=mid+1return max折半查找法也称为二分查找法,它充分利用了...

二分查找的算法复杂度

二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果xa[n/2],则只要在数组a的右半部搜索x.时间复杂度无非就是while循环的次数!总共有n个元素,渐渐...

JS常见排序算法

解析:二分查找,也为折半查找。首先要找到一个中间值,通过与中间值比较,大的放又,小的放在左边。再在两边中寻找中间值,持续以上操作,直到找到所在位置为止。(1)递归方法 (2)非递归方法 4.选择排序:解析:首先在...

JavaScript中几种排序算法的简单实现_基础知识

实现代码如下:时间复杂度为:O(n^2)当然,该算法是有优化余地的,例如将搜索替换的位置算法改为二分查找。冒泡排序经典的排序算法,提到冒泡排序我就心痛。本科时候的必须论文的冒泡排序算法的改进,结果写完论文之后都不能...

对比顺序查找,二分查找和哈希查找算法,它们各自的特点是什么?_百度...

顺序查找,二分查找和哈希查找算法,它们各自的特点是:1.对比顺序查找的特点就是从表的第一个元素开始一个一个向下查找,如果有和目标一致的元素,查找成功;如果到最后一个元素仍没有目标元素,则查找失败。2.二分查找的...

PHP二分查找算法的实现方法示例

本文实例讲述了PHP二分查找算法的实现方法。分享给大家供大家参考,具体如下:二分查找法需要数组是一个有序的数组 假设我们的数组是一个递增的数组,首先我们需要找到数组的中间位置.1.要知道中间位置就需要知道起始位置和...

请问js二分查找代码到底哪里出错

你简直乱写,第一个错误是(leftIndex+rightIndex)/2,不是leftIndex+rightIndex/2,你要搞懂什么是二分法原理再来写代码,第二个错误是你没有定义leftIndex、midIndex、rightIndex,人能看懂,机器看得懂?最后一个毛病,你...

Top