《编程之美》中一摞烙饼的排序,求解疑?
//排序的主函数
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部分的红字,为什么这个函数只是简单的进行交换,却可以将烙饼正确的排序???
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部分的红字,为什么这个函数只是简单的进行交换,却可以将烙饼正确的排序???
...全文
相关推荐
烙饼排序算法和买书问题源码
《程序之美-C语言:烙饼排序算法与买书问题源码》在计算机科学的世界里,算法是解决问题的关键。本文将深入探讨两个编程问题:烙饼排序算法和买书问题,这两个问题都涉及到C语言的高效实现。
翻转烙饼排序问题(C语言源码)
通过C语言实现这一问题的解决方案,不仅可以帮助我们更好地掌握算法的逻辑和编程技巧,同时也能够激发对计算机科学领域更深层次探索的兴趣。
《数学广角合理烙饼与沏茶》课件.ppt
将视角转移到沏茶问题上,我们发现它与烙饼问题有着异曲同工之妙。虽然课件没有详细展开沏茶问题的具体策略,但我们可以推测它同样涉及任务排序和资源优化的问题。
leetcode中国-BeautyOfProgramming:本书的代码
leetcode中国ContentsChapter1游戏之乐1.1让CPU占用率曲线听你指挥CPU占用率曲线为正弦曲线的效果图1.2中国象棋将帅问题1.3一摞烙饼的排序扩展问题2:先按照朴素的panc
人教版小学四年级数学上册第七单元《数学广角》PPT课件77168PPT课件.pptx
例如,如果要烙7张饼,我们应该怎样规划流程才能用最短的时间完成?或者当有3位客人需要赶火车,而平底锅每次只能烙两张饼时,我们该如何安排烙饼的顺序才能保证他们及时吃到饼?


其它技术问题
