📄 c75_41.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>二分查找的算法</title>
</head>
<body bgcolor="#ccefcc">
<blockquote>
<p>在这个算法中, 我们将在一个包含 n 个元素的数组 M
中查找一个元素 x。 算法假设 M 已经按升序排列了。<br>
<br>
二分搜索算法 <br>
第一步: 将 low 置为0, high 置为 n-1; <br>
第二步: 如果 low>high 那么 x 不在 M 中, 算法结束。<br>
第三步: 将 mid 设为 (low+high)/2;<br>
第四步: 如果 M[mid]<x 那么将 low 设为 mid+1 并且转向第二步; <br>
第五步: 如果 M[mid]>x 那么将 high 设为 mid-1 并且转向第二步; <br>
第六步: M[mid] 与 x 相等算法结束。<br>
<br>
我们可以使用这个算法写一个函数, 在这个字典中查找一个词,
如果找到, 返回项目号否则返回 -1。</p>
<div align="center"><center><table border="6" width="670" cellspacing="0" cellpadding="6"
height="150" bordercolor="#FF9933">
<tr>
<th width="894" bgcolor="#FF9933">程序</th>
</tr>
<tr>
<td ALIGN="center" width="894" bgcolor="#00FFFF"><p align="left">int lookup(struct entry
dictionary[],char search[],int num)<br>
{<br>
int low=0, high=num-1;<br>
int mid, result;<br>
while (low <= high)<br>
{<br>
mid = (low + high)/2;<br>
result=strcmp(dictionary[mid].word, search);<br>
if (result == -1) low = mid+1;<br>
else if (result == 1) high=mid-1;<br>
else return(mid);/* found it */<br>
}<br>
return(-1); /* not found */<br>
}<br>
<br>
main()<br>
{<br>
static struct entry dictionary[100] ={{"aardvark","a
burrowing African mammal"},<br>
{"abyss", "a bottomless
pit" },{"acumen", "mentally sharp; keen" },<br>
{"addle","to become
confused" },{"aerie", "a high nest"}, ...... ...... };<br>
char word[10];<br>
int entrys = 10,num;<br>
printf("Enter word:\n");<br>
scanf("%s",word);<br>
num = lookup(dictionary,word,entrys);<br>
if (num != -1)<br>
printf("%s\n",dictionary[num].definition);<br>
else printf("Sorry,that word is not in my dictionary.");<br>
}</td>
</tr>
</table>
</center></div><p align="center"><a href="javascript:close()">关闭</a></p>
</blockquote>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -