递归算法求n个不同数的全排列(超级详细)

问题:求n个不同数的全排列,并打印输出。并求出有多少个全排列。

代码:

void static swap(int* M, int* N)//两数交换
{
	int tem = *M;
	*M = *N;
	*N = tem;
}

//求若干个不同数的全排列
void f6(int a[], int k, int length)//k表示起始位置,length表示末尾位置
{
	register int i = 0;
	if (k == length)
	{
		for (i = 0; i <= length; i++)
		{
			printf("%d", a[i]);
		}
		printf("\n");
	}
	else
	{
		for (i = k; i <= length; i++)
		{
			swap(&a[k], &a[i]);
			f6(a, k + 1, length);
			swap(&a[k], &a[i]);
		}
	}
}

int main()
{
    int a[] = {1,2,3,4,5};
    int length = sizeof(a) / sizeof(a[0]) - 1;
     f6(a, 0, length);
     system("pause");
     return 0;
}

测试结果:

递归算法求n个不同数的全排列(超级详细)_第1张图片

至于全排列个数,很简单,就是n的阶乘,直接计算即可。 

你可能感兴趣的:(常用算法,算法,排序算法)