输出三个整数的全排列(C语言)
#include <stdio.h>
#define NUM 3
void anagram(int[], int); /* 全排列计算 */
void shift(int[], int); /* 循环位移 */
void print(int[]); /* 结果输出 */
main(){
int data[NUM];
int i;
for (i=0; i<NUM; i++)
data[i] = i+1;
anagram(data, NUM);
}
void anagram(int data[ ], int m) {
int i;
if (m==1) { /* 前m-1元素已经排列好 */
print(data); /* 直接输出排列好的数据 */
return;
}
for (i=0; i<m; i++) { /* m次循环 */
anagram(data, m-1);
/* 数组后m-1个元素的全排列 */
shift(data, m);
/* 数组后m个元素向前循环移动一位 */
}
}
void shift(int data[], int n)
{
int i, temp;
temp = data[NUM-n]; /*保留第一个位置的数*/
for (i=NUM-n; i<NUM-1; i++)
/* 移动后n-1个数据 */
data[i] = data[i+1];
/* 将每个数据向前移 */
data[NUM-1] = temp;
/* 将第一位置的数复制到末尾 */
}
void print(int d[ ]) /* 输出数组内容 */
{
int i;
for (i=0; i<NUM; i++)
printf("%d" ,d[i]);
printf("\n");
}