1. 程式人生 > >next_permutation()函式 (數字1~10內實現全排列)

next_permutation()函式 (數字1~10內實現全排列)

原始碼:
template<calss BidrectionalIterator>
bool next_permutation(BidrectionalIterator first,BidrectionalIterator last)
{
    if(first == lase) return false; /* 空區間 */
    BidrectionalIterator i = first;
    ++i;
    if(i == last) return false;  /* 只有一個元素 */
    i = last;                    /* i指向尾端 */
    --i;
    for(;;)
    {
        BidrectionalIterator ii = i;
        --i;
        /* 以上鎖定一組(兩個)相鄰元素 */
        if(*i < *ii)           /* 如果前一個元素小於後一個元素 */
        {
            BidrectionalIterator j = last; /* 令j指向尾端 */
            while(!(*i < *--j));     /* 由尾端往前找,直到遇到比*i大的元素 */
            iter_swap(i,j);          /* 交換i,j */
            reverse(ii,last);        /* 將ii之後的元素全部逆序重排 */
            return true;
        }
        if(i == first)       /* 進行至最前面了 */
        {
            reverse(first,last);    /* 全部逆序重排 */
            return false;
        }
    }
}