📄 mergpass.c
字号:
/********************************************/
/* 一趟归并算法 */
/* 文件名:mergpass.c,函数名:mergepass() */
/********************************************/
void mergepass(table *tabs,table *tabg,int len)
{
int i,j,n;
n=tabg->length=tabs->length;
i=1;
while(i<=n-2*len+1)/*将以i为起点,长度为len的相邻两个有序段依次进行归并*/
{
merge(tabs,tabg,i,i+len-1,i+2*len-1);/*一次归并*/
i=i+2*len; /*置下一次归并的起始位置*/
}
if(i+len-1<n)
/*对剩下的1个长为len,另1个长度不足len,终点为n的两个有序段归并*/
merge(tabs,tabg,i,i+len-1,n);
else /*对剩下的1个长不超过len,终点为n的有序段进行处*/
for(j=i;j<=n;j++) tabg->r[j].key=tabs->r[j].key;
} /* 本算法结束后tabg中的有序段的长度为2*len */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -