|
发表于 2018-5-23 14:47
来自手机
|
显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
<html>
<head>
<meta charset="utf-8">
<title>作业2用折半法查找。类似于indexof</title>
</head>
<body>
<a href="http://club.excelhome.net/forum.php?mod=viewthread&tid=1415332&extra=&mobile=2">原文 精通递归程序设计(VBA)--写给非科班VBA爱好者</a>
<h3>练习2: 在一个有序的整数数组中,查找是否存在元素X,若存在返回其索引编号,若不存在返回-1。其解法可用折半查找法:取数组中间值与X比较,若相等则返回;若中间值小于X,则继续对数值较大的一侧取中间值比较。如此反复进行。请用递归法写出代码。
用折半法查找。类似于indexof.发现sort数值也是按文本排序的。折半查找大数有优势
</h3>
<textarea name="sheet1" id="sheet1" cols="40" rows="5">
alert,boss,1,2,31,11,ok</textarea><br>数组必须是有序数组 按文本排序!
<br>
<input type=text id=find value=boss><br>
<input type=button id=calculate value=查找 onclick="calculate()">
<div id=result>
<div>
</body>
<script type="text/javascript">
var output="";
var k=0;
function calculate(){
printDemo();
}
function printf(a, first, last,find){
var mid=Math.floor((first+last)/2)
output+="第"+k+"次调用子函数结果";
k++;
output+=mid;//输出调试
output+="<br>";
if(first==last) {
output+="最终结果是:"+mid;
document.getElementById("result").innerHTML=output;
return mid;//最后一个没有找到
}
if (find==a[mid]){//找到
output+="最终结果是:"+mid;
document.getElementById("result").innerHTML=output;
return mid;
}
if(find<a[mid]){
last=mid-1;
}else{
first=mid+1;
}
printf(a,first,last,find);
}
function printDemo(){
// a = Array(1, 2,3,14)
output="";
var a=document.getElementById("sheet1").value.split(",");
a=a.sort();
document.getElementById("sheet1").value=a.join(",");
alert('排序后'+a);
// Call printf(a, LBound(a), UBound(a))
var find=document.getElementById('find').value;
// alert(find)
var l= printf(a,0,a.length-1,find);
}
printDemo();
</script>
<html> |
评分
-
2
查看全部评分
-
|