1. 二分搜索算法
二分搜索 是一种在有序数组中查找某一特定元素的搜索算法。这种搜索算法每一次比较都使搜索范围缩小一半。
最坏时间复杂度:O(log n)
最优时间复杂度:O(1)
平均时间复杂度:O(log n)
最坏空间复杂度:迭代: O(1) 递归:O(log n)
2. 什么叫java中的二分查找法
1、算法概念。
二分查找算法也称为折半搜索、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。请注意这种算法是建立在有序数组基础上的。
2、算法思想。
①搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;
②如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。
③如果在某一步骤数组为空,则代表找不到。
这种搜索算法每一次比较都使搜索范围缩小一半。
3、实现思路。
①找出位于数组中间的值,并存放在一个变量中(为了下面的说明,变量暂时命名为temp);
②需要找到的key和temp进行比较;
③如果key值大于temp,则把数组中间位置作为下一次计算的起点;重复① ②。
④如果key值小于temp,则把数组中间位置作为下一次计算的终点;重复① ② ③。
⑤如果key值等于temp,则返回数组下标,完成查找。
4、实现代码。
/**
*description:二分查找。
*@paramarray需要查找的有序数组
*@paramfrom起始下标
*@paramto终止下标
*@paramkey需要查找的关键字
*@return
*/
publicstatic<EextendsComparable<E>>intbinarySearch(E[]array,intfrom,intto,Ekey)throwsException{
if(from<0||to<0){
("paramsfrom&lengthmustlargerthan0.");
}
if(from<=to){
intmiddle=(from>>>1)+(to>>>1);//右移即除2
Etemp=array[middle];
if(temp.compareTo(key)>0){
to=middle-1;
}elseif(temp.compareTo(key)<0){
from=middle+1;
}else{
returnmiddle;
}
}
returnbinarySearch(array,from,to,key);
}
3. 二分搜索算法是利用什么实现的算法
二分搜索算法是利用删减实现的算法。
二分搜索的搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。
二分搜索算法的应用
二分搜索是一种在有序数组中查找某一特定元素的搜索算法,这种搜索算法每一次比较都使搜索范围缩小一半。不过,因为有序数组的顺序性,将二分搜索算法扩展到能适用大致匹配并不是很重要。
举例来说,二分搜索算法可以用来计算一个赋值的排名(或称秩,比它更小的元素的数量)、前趋(下一个最小元素)、后继(下一个最大元素)以及最近邻。搜索两个值之间的元素数目的范围查询可以借由两个排名查询(又称秩查询)来运行。
假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。
重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
4. 二分法原理是什么
二分法的原理:用传统的方法 要找到一个数字,需要for循环一个一个遍历,这种写法,如果在1000个数字中,找一个数组,需要遍历1000次,非常的消耗资源
所以提出了另一种方法 二分法,先对数组进行排序,找出中间的数,和查找的数进行对比;
二分法作用:常用于数据查找的方法; 前端的数组搜索;
案例:
var arr=[2,26,36,45,67,89,12,46,53,42];
//二分查找的前提,一定要从小到大排序;
arr.sort(function(a,b){
return a-b;
})
//最小的数的索引 , 最大的书的索引;
var startindex=0;endindex=arr.length;
var findnum=prompt();
var middleindex=Math.floor((startindex+endindex)/2);
while(startindex!==middleindex&&endindex!==middleindex){
console.log(1);
if(arr[middleindex]>findnum){
endindex=middleindex;
}
else if(arr[middleindex]<findnum){
startindex=middleindex;
}
else if(arr[middleindex]==findnum){
break; //这里很重要,不然的话会一直遍历下去,因为是while循环 ,不加的话,很可能死机
}
middleindex=Math.floor((startindex+endindex)/2);
}
if(arr[middleindex]==findnum){
document.write("找到了");
}
else{
document.write("没找到");
}
5. 二分查找算法
二分查找算法,该算法要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。如果一个序列是无序的或者是链表,那么该序列就不能使用二分查找。
二分查找算法原理:若待查序列为空,则返回-1,并退出算法;若待查序列不为空,则将它的中间元素与目标数值进行比较,判断是否相等;若相等,则返回中间元素索引,并退出算法;此时已查找成功。若不相等,则比较中间元素与目标数值的大小。
二分查找的一个技巧是:不要出现else,而是把所有情况用else,if写清楚,这样可以清楚地展现所有细节。本文都会使用else,if,旨在讲清楚,读者理解后可自行简化。
6. 高中数学必修3算法初步中二分法是什么意思
二分法是一种解方程的方法,是把一个方程转化成一个函数f(x)=0的形式,然后利用图像找出方程解的近似值的方法。大致步骤为:
1.把方程转化成f(x)=0;
2.画出方程的图像,找出方程的根所在的大致范围。通常把方程的根的范围定在(a,b)这样的一个整数范围内,a,b差值越小越好。判定的标准就是函数零点的存在性定理,需要使这个区间两个端点的函数值符号相反,也就是f(a)f(b)<0.比如,f(x)=4x-7,根的范围在(1,2)这个区间内,f(1)f(2)=-3<0.
3.由于两个端点的函数值符号相反,所以在这个开区间内一定存在零点。我们可以把这个区间一分为二,就是得到(a+b)/2的值。然后再利用函数零点的存在性定理,确定零点是在(a,(a+b)/2)这个区间内还是在((a+b)/2,b)这个区间内。只要端点函数值符号不同,那么零点就在这个区间内。
4.上一步我们把函数的零点的范围缩小了一半,那么按照同样的方法,可以把零点所在的开区间范围再次缩小一半,以此类推,我们可以把这个过程无穷进行下去。当达到一定程度时,零点所在的范围已经很小了,小到可以忽略(或者说在精确度范围以内了)时,就可以把这个最小的区间的两端的端点值的任意一个近似当做零点,也就是原方程的根。
6.这个无限对半(二分)缩小范围来“逼”出方程的根的方法就是“二分法”。详见必修1第三章。
7. 二分排序算法是什么 我听说过快速排序 折半查找 怎么没听说过二分排序 笔试题
其一:
二分排序是用二分法(就是折半查找)查找插入位置,来进行排序的。其实就是插入排序的一种修改。写一段代码解释一下:
void MidInsertSort(int array[],int n)
{
int left,right,num;
int middle,j,i;
for(i = 1;i < n;i++)
{
left = 0;// 准备
right = i-1;
num = array[i];
while( right >= left)// 二分法查找插入位置
{
middle = ( left + right ) / 2; // 指向已排序好的中间位置
if( num < array[middle] )// 即将插入的元素应当在在左区间
right = middle-1;
else // 即将插入的元素应当在右区间
left = middle+1;
}
//每次查找完毕后,left总比right大一,a[left]总是存放第一个比num大的数,因此应从此处开始,每
//个元素右移一位,并将num存入a[left]中,这样就保证了a[0...i]是排好序的
for( j = i-1;j >= left;j-- )// 后移排序码大于R[i]的记录
array[j+1] = array[j];
array[left] = num;// 插入
}
}
以上引自http://blog.sina.com.cn/s/blog_4b9eab320100kl08.html
其二:
如果是“二分归并排序”,就应该是折半排序。。。
主流的说法就这两种。
8. 什么是二分法
二分法(Bisection method) 即一分为二的方法. 设[a,b]为R的闭区间. 逐次二分法就是造出如下的区间序列([an,bn]):a0=a,b0=b,且对任一自然数n,[an+1,bn+1]或者等于[an,cn],或者等于[cn,bn],其中cn表示[an,bn]的中点。
典型算法
算法:当数据量很大适宜采用该方法。采用二分法查找时,数据需是排好序的。
基本思想:假设数据是按升序排序的,对于给定值key,从序列的中间位置k开始比较,
如果当前位置arr[k]值等于key,则查找成功;
若key小于当前位置值arr[k],则在数列的前半段中查找,arr[low,mid-1];
若key大于当前位置值arr[k],则在数列的后半段中继续查找arr[mid+1,high],
直到找到为止,时间复杂度:O(log(n))。
9. 二分搜索算法是利用什么实现的算法
二分搜索算法是利用排除剩余元素中一半的元素实现的算法。
在计算机科学中,二分搜索(英语:binary search),也称折半搜索(英语:half-interval search)、对数搜索(英语:logarithmic search),是一种在有序数组中查找某一特定元素的搜索算法。
二分搜索算法原理:
1、如果待查序列为空,那么就返回-1,并退出算法;这表示查找不到目标元素。如果待查序列不为空,则将它的中间元素与要查找的目标元素进行匹配,看它们是否相等。如果相等,则返回该中间元素的索引,并退出算法;此时就查找成功了。如果不相等,就再比较这两个元素的大小。
2、如果该中间元素大于目标元素,那么就将当前序列的前半部分作为新的待查序列;这是因为后半部分的所有元素都大于目标元素,它们全都被排除了。
3、如果该中间元素小于目标元素,那么就将当前序列的后半部分作为新的待查序列;这是因为前半部分的所有元素都小于目标元素,它们全都被排除了。