フル配列の生成


「ABCDE」を生成する全配列を例に全配列の生成は、後の数から、「D」<「E」のような第1の適合順序を見つける信号である.処理を開始します.処理方法は、この順序に合致する位置(例えば、‘B’<‘C’)を見つけると、‘C’の後ろ(‘C’を含む文字列を並べて(エントロピー値を復元する))を生成し、左から歩いて、‘B’より大きい文字を最初に見つけると、この2つの文字の位置を交換する.
実は本質的には‘B’より大きい数の中で一番小さいものを出して、それを交換して、順番を並べていますが、このようなアルゴリズムによって、同じ効果を実現しました.これは、このコードが多くの全配列と生成されるのとは異なる場所のコードです.
#include 
using namespace std;
//        A-E

string s = "ABCDE";
void sort(int start,int end){ //   easysort 
    for (int i = start; i < end; ++i){
        for (int j = i + 1; j <= end; ++j){
            if (s[i] > s[j]){
                char t = s[i];
                s[i] = s[j];
                s[j] = t;
            }
        }
    }
} //            
//      ,              
void findALittleBigger(int j ,int start){ //end    4       
    for (int i = start; i <= 4; ++i){
        if (s[i] > s[j]){
            char t = s[i];
            s[i] = s[j];
            s[j] = t;
            break;
        }
    } 
} 
int main(){
    cout << s<< endl;
    for (int time = 0;time < 119; ++time){//  199       
        for (int i = 4; i > 0; --i) {
            if (s[i] > s[i - 1]){ //     ,  s[i - 1]     ,   s[i-1]  s[i - 1]               
                sort(i, 4);
                findALittleBigger(i - 1, i); 
                break;
            }
        }
        cout << s<< endl;
    }

}