实现效果如下:(如图是打印从1到5的所有排序)
具体代码如下:
#include<stdio.h>
void swap(int* a, int* b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void print(int p[], int n)
{
if (n == 5)
{
for (int i = 0; i < n; i++)
{
printf("%d ", p[i]);
}
printf("\n");
return;
}
for (int i = n; i < 5; i++)
{
swap(p + i, p + n);
print(p, n + 1);
swap(p + i, p + n);
}
}
int main()
{
int p[] = { 1,2,3,4,5 };
print(p,0);
return 0;
}
实现原理:
首先判断当n==5的条件,此时已经完成了排序,故直接打打印出来。
当n<5时,通过元素交换实现不同的排序,在通过第二次相同的排序实现回溯,进行前一步的重新排序。
对于n=0,循环执行5次,对于n=1,循环执行4次,n=3执行3次,n=4执行2次,因此实现了总共执行5*4*3*2*1次,打印出所有排列