You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

38 lines
715 B

#include<bits/stdc++.h>
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);
}