void permute(string elems, int mid, int end)
{
    static int count;
    if (mid == end) {
        cout << ++count << " : " << elems << endl;
        return ;
    }
    else {
    for (int i = mid; i <= end; i++) {
            swap(elems, mid, i);
            permute(elems, mid + 1, end);
            swap(elems, mid, i);
        }
    }
}
Вышеуказанная функция показывает перестановки str (с str[0..mid-1] в качестве устойчивого префикса и str[mid..end] в качестве перестановочного суффикса). Поэтому мы можем использовать permute(str, 0, str.size() - 1), чтобы показать все перестановки одной строки.
Но функция использует рекурсивный алгоритм; возможно, его производительность может быть улучшена?
Есть ли какие-нибудь лучшие методы для перестановки строки?
