您的位置:首页 > 编程语言 > C语言/C++

my_next_permutation in c++

2008-08-22 08:34 253 查看
bool my_next_permutation(int *pData, int nSize)

{

int *pLast = pData + nSize - 1;

int *pCurr = pLast;

for(;;)

{

if (pCurr == pData)

return false;

int *pPrev = pCurr-1;

if (*pPrev < *pCurr)

{

int *pTemp = pLast;

for(;;)

{

if (pTemp == pData)

return false;

if (*pTemp > *pPrev)

break;

pTemp--;

}

std::swap(*pPrev, *pTemp);

std::reverse(pCurr, pLast+1);

return true;

}

pCurr--;

}

}

TEST:

do

{

copy(a, a + size, ostream_iterator<int>(cout, ","));

cout << endl;

} while(my_next_permutation(a, size));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: