C/C++ code#include
#include
#include
int func(const int *array, int size)
{
int *tab;
int cnt, cur;
int i;
if (NULL == array || size <= 0)
{
return 0;
}
cnt = 0;
cur = 0;
if (NULL == (tab = (int *)malloc(size * sizeof(int))))
{
return 0;
}
tab[0] = -1;
while (cur >= 0)
{
do
{
tab[cur] += 1;
for (i = 0; i < cur; ++i)
{
if (tab[cur] == tab[i])
{
break;
}
}
}while (tab[cur] < size && i != cur);
if (tab[cur] < size)
{
if (size - 1 == cur)
{
for (i = 0; i < size; ++i)
{
printf("%d ", array[tab[i]]);
}
printf("\n");
++cnt;
}
else
{
cur += 1;
tab[cur] = -1;
}
}
else
{
cur -= 1;
}
}
free(tab);
return cnt;
}
int main()
{
int a[] = {1, 2, 3, 4, 5};
printf("共有%d中全排列情况\n", func(a, sizeof(a) / sizeof(a[0])));
system("pause");
return 0;
}