Jump to content

Permutations: Difference between revisions

1,343 bytes added ,  6 years ago
Line 1,065:
 
=={{header|C}}==
Non-recursive algorithm to generate all permutation. SeeIt aprints fullobjects in lexicographical order. A paper here:
[https://habr.com/post/354790/]
<lang c>
#include <stdio.h>
int main (int argc, char *argv[]) {
//here we check arguments
if (argc < 2) {
printf("Enter an argument. Example 1234 or dcba:\n");
return 0;
}
//it calculates an array's length
int x;
for (x = 0; argv[1][x] != '\0'; x++);
//buble sort the array
int f, v, m;
for(f=0; f < x; f++) {
for(v = x-1; v > f; v-- ) {
if (argv[1][v-1] > argv[1][v]) {
m=argv[1][v-1];
argv[1][v-1]=argv[1][v];
argv[1][v]=m;
}
}
}
 
//it calculates a factorial to stop the algorithm
char a[x];
int k=0;
int fact=k+1;
while (k!=x) {
a[k]=argv[1][k];
k++;
fact = k*fact;
}
a[k]='\0';
//Main part: here we permutate
int i, j;
int y=0;
char c;
while (y != fact) {
printf("%s\n", a);
i=x-2;
while(a[i] > a[i+1] ) i--;
j=x-1;
while(a[j] < a[i] ) j--;
c=a[j];
a[j]=a[i];
a[i]=c;
i++;
for (j = x-1; j > i; i++, j--) {
c = a[i];
a[i] = a[j];
a[j] = c;
}
y++;
}
}
</lang>
 
=={{header|C}}==
Non-recursive algorithm to generate all permutation. It prints them from right to left.
See a full paper here:
[https://habrahabr.ru/post/330690/]
<lang c>
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.