《编程之美》中一摞烙饼的排序,求解疑?
无间虚者 2013-04-15 03:33:10 //排序的主函数
void Search(int step)
{
int i, nEstimate;
m_nSearch++;
//如果搜索次数大于最大的排序次数就退出
nEstimate = LowerBound(m_ReverseCakeArray, m_nCakeCnt);
if(step + nEstimate > m_nMaxSwap)
return;
//如果已经排好序,即翻转完成, 输出结果
if(IsSorted(m_ReverseCakeArray, m_nCakecnt))
{
.....
}
//递归进行翻转
for(i =1; i< m_nCakeCnt;i++)
{
Reverse(0, i);
m_ReverseCakeArraySwap[step]=i;
Search(step+1);
Reverse(0, i);
}
}
//翻转烙饼信息
void Reverse(int nBegin, int nEnd)
{
assert(nEnd > nBegin);
int i,j,t;
//翻转烙饼信息
for(i = nBegin, j = nEnd; i< j; i++,j--)
{
t = m_ReverseCakeArray[i];
m_ReverseCakeArray[i] = m_ReverseCakeArray[j];
m_ReverseCakeArray[j] = t;
}}
第2部分的红字,为什么这个函数只是简单的进行交换,却可以将烙饼正确的排序???