#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--