1. 程式人生 > >C++實現——序列的下一個字典序

C++實現——序列的下一個字典序

這裡寫圖片描述

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
//全排列函式 next_permutation
//給定一個數組 要求下一個比它大的序列
//處理函式
/**
* a 待排列陣列的引用
* return 若有下一序列返回true 若無返回false
*/
bool my_nextPermutation(vector<int>& a){
    //如果不存在下一個則返回false
    int i, j;
    for (i = a.size() - 1
; i > 0; i--){ if (a[i] > a[i - 1]){ break; } } //如果已經完全是將序排列的,就不再有下一個序列了 if (i == 0)return false; //從右側找到第一個比a[i-1]大的數,進行置換 for (j = a.size() - 1; j > i - 1; j--){ if (a[j] > a[i - 1]){ break; } } swap(a[j], a[i - 1
]); //將a[i-1]後面的數進行升序排列 //此處也可以用reverse(a.begin()+i,a.end()),因為原先是將序排列的 sort(a.begin() + i, a.end()); return true; } //測試函式 int main(){ vector<int> v{1,2,3,4}; do{ for (auto a : v){ cout << a << " "; } cout << endl; } while
(my_nextPermutation(v)); return 0; }