#include <stdio.h>
/* 列出由at以後所有的排列 */
void permutation(int data[], int at, int arraySize) {
int i, t;
int* newArray;
// 如果已經排到最後了,印出結果
if (at == arraySize) {
for (i = 0; i < arraySize; i++) {
printf("%d ", data[i]);
}
printf("\n");
} else {
newArray = (int *)malloc(arraySize*sizeof(int));
// 先複製原有資料
for (i = 0; i < arraySize; i++) {
newArray[i] = data[i];
}
// 由at到arraySize-1,一一和at的元素交換
for (i = at; i < arraySize; i++) {
t = newArray[at];
newArray[at] = newArray[i];
newArray[i] = t;
// 然後遞迴呼叫,以找出at+1以後的所有排列
permutation(newArray, at + 1, arraySize);
}
free(newArray);
}
}
int main() {
int data[] = {1,2,3};
permutation(data, 0, 3);
}
--Back--