《编程之美》一摞烙饼问题探讨
这类问题我最早遇到是厨师摆盘子问题,就是厨师要把一个架子上的盘子按照从大到小排列,只能象本题中翻动烙饼的方式翻动盘子,当时我给出了这样的答案:
int FindMaxIdx(int *pDishes, int nBegin, int nEnd)
{
int i,maxIdx = nBegin;
for(i = nBegin + 1; i <= nEnd; i++)
{
if(pDishes[i] > pDishes[maxIdx])
{
maxIdx = i;
}
}
return maxIdx;
}
void Revert(int *pDishes, int nBegin, int nEnd)
{
int i,j,tmp;
assert(nEnd > nBegin);
for(i = nBegin, j = nEnd; i < j; i++,j--)
{
tmp = pDishes[i];
pDishes[i] = m_CakeArray[j];
pDishes[j] = tmp;
}
}
int PrefixSort(int *pDishes, int fjCount)
{
int i,curMax;