Skip to content

Instantly share code, notes, and snippets.

@lamida
Last active August 29, 2015 14:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lamida/8a949caea73dbaad16c7 to your computer and use it in GitHub Desktop.
Save lamida/8a949caea73dbaad16c7 to your computer and use it in GitHub Desktop.
array-permutation.c
#include <stdio.h>
#include <stdlib.h>
void swap(int *a, int *b)
{
//printf("%p %p\n", a, b);
//printf("%d %d\n", *a, *b);
int tmp = *a;
*a = *b;
*b = tmp;
//printf("%d %d\n", *a, *b);
}
void print(int ar[], int size)
{
int i;
for (i = 0; i < size; i++) {
printf("%d ", ar[i]);
}
printf("\n");
}
void f(int *ar, int i, int size)
{
if (size == i) {
print(ar, size);
return;
}
int j = i;
for (j = i; j < size; j++) {
swap(ar+i, ar+j);
f(ar, i+1, size);
swap(ar+i, ar+j);
}
}
int main(int argc, const char *argv[])
{
int la[] = {1};
int lb[] = {1,2};
int lb[] = {1,2};
int lc[] = {1,2,3};
int ld[3][2] = {{1,2},{2,3},{3,4}};
f(lc, 0, 3);
return 0;
}
/*
f(int *ar, int i, int size)
ar = 1 2 3
size = 3
f([1 2 3], 0, 3)
j = 0
for(j = 0; j < 3; j++)
swap(ar0,ar0)
f([1 2 3], 1, 3)
j = 1
for(j = 1; j < 3; j++)
swap(ar1,ar1)
f([1 2 3], 2, 3)
j = 2
for(j = 2; j < 3; j++)
swap(ar2,ar2)
f([1 2 3], 3, 3) >>>> 123
swap(ar2,ar2)
swap(ar1,ar1)
for(j = 2; j < 3; j++)
swap(ar1,ar2)
f([1 3 2], 2, 3)
j = 2
for(j = 2; j < 3; j++)
swap(ar2,ar2)
f([2 1 3], 3, 3) >>>> 132
swap(ar2,ar2)
swap(ar1,ar2) 1 2 3
swap(ar0,ar0) 1 2 3
for(j = 1; j < 3; j++)
swap(ar0,ar1)
f([2 1 3], 1, 3)
j = 1
for(j = 1; j < 3; j++)
swap(ar1,ar1)
f([2 1 3], 2, 3)
j = 2
for(j = 2; j < 3; j++)
swap(ar2,ar2)
f([2 1 3], 3, 3) >>>> 213
swap(ar2,ar2)
swap(ar1,ar1)
for(j = 2; j < 3; j++)
swap(ar1,ar2)
f([2 3 1], 2, 3)
j = 2
for(j = 2; j < 3; j++)
swap(ar2,ar2)
f([2 3 1], 3, 3) >>>> 231
swap(ar2,ar2)
swap(ar1,ar2) 2 1 3
swap(ar0,ar0) 2 1 3
for(j = 2; j < 3; j++)
swap(ar0,ar2)
f([3 1 2], 1, 3)
j = 1
for(j = 1; j < 3; j++)
swap(ar1,ar1)
f([3 1 2], 2, 3)
j = 2
for(j = 2; j < 3; j++)
swap(ar2,ar2)
f([2 1 3], 3, 3) >>>> 312
swap(ar2,ar2)
swap(ar1,ar1)
for(j = 2; j < 3; j++)
swap(ar1,ar2)
f([3 2 1], 2, 3)
j = 2
for(j = 2; j < 3; j++)
swap(ar2,ar2)
f([3 2 1], 3, 3) >>>> 321
swap(ar2,ar2)
swap(ar1,ar2) 1 2 3
swap(ar0,ar0) 1 2 3
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment