使用JavaScript实现一个折半查找算法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
折半查找代码如下:
function binSearch(arr,data){//折半查找,也叫二分查找
var upperBound=arr.length-1;
var lowerBound=0;
while(lowerBound<=upperBound){//未遍历完
var mid=Math.floor((lowerBound+upperBound)/2);
document.write("当前中点为:"+mid+'<br>');//记录选中的中点
if(arr[mid]<data){
lowerBound=mid+1;
}else if(arr[mid]>data){
upperBound=mid-1;
}else{
return mid;
}
}
return -1;
}
那么出现了重复的,我们需要计数。计数的思想就是在找到点的位置左右开始遍历,找到相同的则计数,找到不同的则停止遍历,代码如下:
function count(arr,data){//计算重复出现的次数
var count=0;
var position=binSearch(arr,data);//找出值所在位置
if(position>-1){
count++;//找到后,往左右一次遍历直到找到不同值后break
for(var i=position-1;i>0;i--){
if(arr[i]==data){
count++;
}else{
break;
}
}
for(var i=position+1;i<arr.length;i++){
if(arr[i]==data){
count++;
}else{
break;
}
}
}
return count;
}
最后是实验:
//实验
var nums=[1,2,2,3,3,4,5,6,7,8,9,10,11];
var bool=binSearch(nums,3);
document.write("所在位置为:"+bool+"<br>");
document.write("含有个数为:"+count(nums,3));
//当前中点为:6
//当前中点为:2
//当前中点为:4
//所在位置为:4
//当前中点为:6
//当前中点为:2
//当前中点为:4
//含有个数为:2
完整代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JavaScript折半查找</title>
</head>
<body>
<script type="text/javascript">
function binSearch(arr,data){//折半查找,也叫二分查找
var upperBound=arr.length-1;
var lowerBound=0;
while(lowerBound<=upperBound){//未遍历完
var mid=Math.floor((lowerBound+upperBound)/2);
document.write("当前中点为:"+mid+'<br>');//记录选中的中点
if(arr[mid]<data){
lowerBound=mid+1;
}else if(arr[mid]>data){
upperBound=mid-1;
}else{
return mid;
}
}
return -1;
}
function count(arr,data){//计算重复出现的次数
var count=0;
var position=binSearch(arr,data);//找出值所在位置
if(position>-1){
count++;//找到后,往左右一次遍历直到找到不同值后break
for(var i=position-1;i>0;i--){
if(arr[i]==data){
count++;
}else{
break;
}
}
for(var i=position+1;i<arr.length;i++){
if(arr[i]==data){
count++;
}else{
break;
}
}
}
return count;
}
//实验
var nums=[1,2,2,3,3,4,5,6,7,8,9,10,11];
var bool=binSearch(nums,3);
document.write("所在位置为:"+bool+"<br>");
document.write("含有个数为:"+count(nums,3));
//当前中点为:6
//当前中点为:2
//当前中点为:4
//所在位置为:4
//当前中点为:6
//当前中点为:2
//当前中点为:4
//含有个数为:2
</script>
</body>
</html>
运行效果图如下:
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注天达云行业资讯频道,感谢您对天达云的支持。