《编程之美》中一摞烙饼的排序,求解疑?

无间虚者 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部分的红字,为什么这个函数只是简单的进行交换,却可以将烙饼正确的排序???
...全文
55 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧