《算法导论》第2版 P9页有这样一句话:“在本书中,主要用伪代码书写的程序形式来表达算法,这种伪代码在很多方面都与C、Pascal或Java等语言比较类似”。
我在此用C/C++来实现部分功能,仅代表我个人理解,如有错误还请帮忙改正,如有问题可以联系 QQ:643166601 或发送邮件到 643166601@qq.com
第2章 算法入门
P17
void KXL_Merge(int *pnArray, int p, int q, int r)
{
int n1 = q - p + 1;
int n2 = r - q;
int *pLArray = new int[n1 + 1];
int *pRArray = new int[n2 + 1];
int i;
int j;
for(i = 0; i < n1; i ++)
{
pLArray[i] = pnArray[p + i];
}
pLArray[n1] = -1;
for(j = 0; j < n2; j ++)
{
pRArray[j] = pnArray[q + 1 + j];
}
pRArray[n2] = -1;
i = 0;
j = 0;
for(int k = p; k < r + 1; k ++)
{
if((pLArray[i] > 0) && (pRArray[j] > 0))
{
if(pLArray[i] <= pRArray[j])
{
pnArray[k] = pLArray[i];
i ++;
}
else
{
pnArray[k] = pRArray[j];
j ++;
}
}
else if((-1 != pLArray[i]) && (-1 == pRArray[j]))
{
int ii = i;
while(-1 != pLArray[ii])
{
pnArray[k] = pLArray[ii];
k ++;
ii ++;
}
i = ii;
break;
}
else if((-1 == pLArray[i]) && (-1 != pRArray[j]))
{
int jj = j;
while(-1 != pRArray[jj])
{
pnArray[k] = pRArray[jj];
k ++;
jj ++;
}
j = jj;
break;
}
else if((-1 == pLArray[i]) && (-1 == pRArray[j]))
{
cout << pLArray[n1 -1] << " " << pRArray[n2 -1] << endl;
}
}
if(NULL != pLArray)
{
delete[] pLArray;
pLArray = NULL;
}
if(NULL != pRArray)
{
delete[] pRArray;
pRArray = NULL;
}
}
void KXL_MergeSort(int *pnArray, int p, int r)
{
int q;
if(p < r)
{
q = (p + r) / 2;
KXL_MergeSort(pnArray, p, q);
KXL_MergeSort(pnArray, q+1, r);
KXL_Merge(pnArray, p, q, r);
}
}