Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- new
- str[] = "abc",
- len = strlen(str),
- tmp, i, j, r, k;
- do {
- // Вывод очередной перестановки
- printf("%s", str);
- // Находим самое правое место, где s[i] < s[i+1]
- i = len - 1;
- while (i >= 0 && str[i] > str[i + 1]) {
- i--;
- }
- // Уже получили самую старшую перестановку
- if (i < 0) {
- break;
- }
- // Находим str[j] - наименьший элемент справа от str[i] и больший его
- j = len - 1;
- while (str[i] > str[j]) {
- j--;
- }
- // Меняем str[i] <-> str[j]
- tmp = str[j];
- str[j] = str[i];
- str[i] = tmp;
- // То, что за "i" - переворачиваем
- for (k = i + 1, r = len - 1; r > k; k++, r--) {
- tmp = str[r];
- str[r] = str[k];
- str[k] = tmp;
- }
- } while (i >= 0);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement