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

2 years ago
#include<bits/stdc++.h>
using namespace std;
//<2F><>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB>Ԫ<EFBFBD><D4AA>
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) {
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
prt(arr, len - 1);
i = j = len - 1;
//<2F><>ǰ<EFBFBD><C7B0><EFBFBD>ҵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>С<EFBFBD><D0A1>Ԫ<EFBFBD><D4AA>
while (i > 0 && arr[i] < arr[i - 1]) --i;
temp = i;
if (i == 0) break;
//<2F>Ⱥ<EFBFBD><C8BA><EFBFBD><EFBFBD>ҵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>arr[i-1]<5D><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>
while (temp + 1 < len && arr[temp + 1] > arr[i - 1]) ++temp;
swap(arr[i - 1], arr[temp]); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
reverse(arr + i, arr + len); //<2F><><EFBFBD><EFBFBD>
};
}
int main()
{
int arr[3] = { 3,1,2 };
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
sort(arr, arr + 3);
//<2F><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>
perm(arr,3);
}