#include using namespace std; //打印数组全部元素 void prt(int arr[], int end) { for (int i = 0; i <= end; ++i) { printf("%d", arr[i]); } printf("\n"); } void perm(int arr[], int len) { if (len < 2) return; int i, j, temp; while(1) { //输出当前序列 prt(arr, len - 1); i = j = len - 1; //向前查找第一个变小的元素 while (i > 0 && arr[i] < arr[i - 1]) --i; temp = i; if (i == 0) break; //先后查找第一个比arr[i-1]大的元素 while (temp + 1 < len && arr[temp + 1] > arr[i - 1]) ++temp; swap(arr[i - 1], arr[temp]); //交换两个值 reverse(arr + i, arr + len); //逆序 }; } int main() { int arr[3] = { 3,1,2 }; //快速排序 sort(arr, arr + 3); //输出全排列 perm(arr,3); }