📄 text7-46.htm
字号:
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body bgcolor="#FFFFFF" link="#0000FF" vlink="#3399FF" alink="#FF0066">
<div id="Layer1" style="position:absolute; width:711px; height:21px; z-index:1; top: 10px; background-color: #CCCCCC; layer-background-color: #CCCCCC; border: 1px none #000000; left: 26px"><b>|</b><font face="宋体" size="2"><a href="../text1/text1-0.htm">第一章</a></font><b>|</b><font face="宋体" size="2"><a href="../text2/text2-0.htm">第二章</a></font><b>|</b><font face="宋体" size="2"><a href="../text3/text3-0.htm">第三章</a></font><b>|</b><font face="宋体" size="2"><a href="../text4/text4-0.htm">第四章</a></font><b>|</b><font face="宋体" size="2"><a href="../text5/text5-0.htm">第五章</a></font><b>|</b><font face="宋体" size="2"><a href="../text6/text6-0.htm">第六章</a></font><b>|</b><font face="宋体" size="2">第七章</font><b>|</b><font face="宋体" size="2"><a href="../text8/text8-0.htm">第八章</a></font><b>|</b><font face="宋体" size="2"><a href="../text9/text9-0.htm">第九章</a></font><b>|</b><font face="宋体" size="2"><a href="../text10/text10-0.htm">第十章</a></font><b>|</b><font size="2" face="宋体"><a href="../textA/textA-0.htm">算法分析</a><b><font color="#000000">|</font></b>
</font></div>
<pre align="left"><font face="Arial, Helvetica, sans-serif" size="4" color="#000000"><b>
void <font color="#FF0000">run_generation</font>(char *in_name, char *out_name)
{<i><font size="3" color="#CC0099">/* generate runs using a loser tree */</font></i>
int winner = 0, winner_run = 0, current_run = 0;
int max_runs = 0, last_key = INT_MAX;
int i, parent, loser, temp;
FILE *in, *out;
in = open_input(in_name);
out = fopen(out_name, "wb");
for (i = 1; i < k; i++){
<i><font size="3" color="#CC0099"> /* set up tree with dummy nodes */</font></i>
tree[i].data.key = 0;
tree[i].data.run = 0;
tree[i].loser = i;
}
tree[winner].data.run = 0;
for ( ; ; ){
if (winner_run != current_run){
if (winner_run > max_runs){
<i><font size="3" color="#CC0099"> /* last record reached , close files and return */</font></i>
fclose(in); fclose(out);
return;
}
current_run = winner_run;
}
if (winner_run){
<i><font size="3" color="#CC0099"> /* suppress output if dummy records */</font></i>
fwrite(&tree[winner].data, sizeof(element), 1, out);
last_key = tree[winner].data.key;
}
fread(&tree[winner].data, sizeof(element), 1, in);
if (feof(in)){ <i><font size="3" color="#CC0099"> /* signal to end processing */</font></i>
winner_run = max_runs+1;
tree[winner].data.run = winner_run;
}
else {
if (tree[winner].data.key < last_key){
winner_run++;
tree[winner].data.run = winner_run;
max_runs = winner_run;
}
else
tree[winner].data.run = current_run;
}
<i><font size="3" color="#CC0099"> /* adjust tree */</font></i>
parent = (k + winner)/2;
while(parent){
loser = tree[parent].loser;
if (tree[loser].data.run < winner_run ||
(tree[loser].data.run == winner_run &&
tree[loser].data.key < tree[winner].data.key)){
temp = winner;
winner = tree[parent].loser;
tree[parent].loser = temp;
winner_run = tree[winner].data.run;
}
parent/ = 2;
}
}
}
FILE<font color="#FF0000"> *open_input</font>(char *source_name)
{
FILE *source;
source = fopen(source_name, "rb");
if (!source){
fprintf(stderr, "File %s cannot be opened for input\n",
source_name);
exit(1);
}
return source;
}
</b></font></pre>
<table width="731" cellspacing="0" cellpadding="0">
<tr>
<td width="327"> </td>
<td width="271"><a href="../index.htm"><img width="60" height="25" usemap="#MapMap4" border="0" src="../../images/home.gif"></a><a href="../index.htm"><map name="MapMap4"><area shape="rect" coords="42,-34,88,-15" href="text0.htm"><area shape="rect" coords="4,4,55,23" href="text7-index.htm"></map></a></td>
<td width="131"><font face="楷体_GB2312" size="2"><b><a href="text7-45.htm">上一页</a>
<a href="text7-47.htm">下一页</a> </b></font></td>
</tr>
</table>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -