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
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);
|
|
}
|